使用服务定位器向服务提供容器实例是错误的吗?

时间:2011-05-15 13:52:16

标签: php zend-framework dependency-injection service-layer service-locator

我正在使用服务层,然后,我有很多服务,如:

  • UserService
  • ArticleService
  • CommentService
  • AuthorizationService

有时我需要使用其他服务的服务。

目前,我正在使用sfServiceContainer进行依赖注入,我在我的一些服务中注入了我的Doctrine 2实体管理器,但是,我正在考虑切换并注入Container实例以便能够获取任何服务和EntityManager的。

但是我被困住了,我不确定这是个好主意。

1 个答案:

答案 0 :(得分:0)

如果您的容器没有为您提供更好的方法,那么可以使用服务定位器。

如果您使用像Ding这样的容器(http://marcelog.github.com/Ding),您的服务将是bean,而不是拥有服务定位器,您可以在这些服务中实现IContainerAware接口。

每当创建这些bean时,容器就会自动注入,然后你可以直接从这些服务/ bean中使用$ this-> getBean('aService')。在Ding的情况下,甚至还有一个Doctrine2集成示例(包括注入EntityManager)