change to service shared ptr
add singleton_service_factory