我正在使用服务层,然后,我有很多服务,例如:
- 用户服务
- 文章服务
- 评论服务
- 授权服务
有时我需要使用另一个服务中的服务。
目前,我正在使用 sfServiceContainer 进行依赖注入,并在我的一些服务中注入我的 Doctrine 2 实体管理器,但是,我正在考虑切换并注入容器实例以便能够获取任何服务和 EntityManager。
但我被困住了,我不确定这是一个好主意。
我正在使用服务层,然后,我有很多服务,例如:
有时我需要使用另一个服务中的服务。
目前,我正在使用 sfServiceContainer 进行依赖注入,并在我的一些服务中注入我的 Doctrine 2 实体管理器,但是,我正在考虑切换并注入容器实例以便能够获取任何服务和 EntityManager。
但我被困住了,我不确定这是一个好主意。
如果您的容器没有为您提供更好的方法来执行此操作,则可以使用服务定位器。
如果您使用像 Ding (http://marcelog.github.com/Ding) 这样的容器,您的服务将是 bean,并且您可以在这些服务中实现 IContainerAware 接口,而不是使用服务定位器。
每当创建这些 bean 时,容器将自行注入,然后您可以直接从这些服务/bean 内部 $this->getBean('aService') 。在 Ding 的情况下,甚至还有一个 Doctrine2 集成的示例(包括 EntityManager 的注入)