使用 Service Locator 向 Service 提供容器实例是否错误?
我正在使用服务层,然后,我有很多服务,例如:
- UserService
- ArticleService
- CommentService
- AuthorizationService
有时我需要使用另一个服务中的服务。
目前,我正在使用 sfServiceContainer 进行依赖项注入,并在某些服务中注入 Doctrine 2 实体管理器,但是,我正在考虑切换和注入容器实例,以便能够获取任何服务和 EntityManager。
但我被困住了,我不确定这是一个好主意。
I'm using a Service layer, then, I've alot of Service like:
- UserService
- ArticleService
- CommentService
- AuthorizationService
Sometimes I need to use a Service from another Service.
Currently, I'm using sfServiceContainer for dependency injection, and I inject my Doctrine 2 Entity Manager in some of my service, however, I'm thinking to switch and inject the Container Instance to be able to fetch any Service and the EntityManager.
But I'm stuck and I'm not sure it's a good idea.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的容器没有为您提供更好的方法来执行此操作,则可以使用服务定位器。
如果您使用像 Ding (http://marcelog.github.com/Ding) 这样的容器,您的服务将是 bean,并且您可以在这些服务中实现 IContainerAware 接口,而不是使用服务定位器。
每当创建这些 bean 时,容器就会注入自身,然后您可以直接从这些服务/bean 内部 $this->getBean('aService') 。在 Ding 的例子中,甚至还有一个 Doctrine2 集成的示例(包括 EntityManager 的注入)
It's ok to use a Service Locator if your container does not provide you with a better way to do this.
If you use a container like Ding (http://marcelog.github.com/Ding), your services would be beans, and instead of having a service locator, you can implement the IContainerAware interface in these services.
The container will then inject itself whenever these beans are created, and you can then $this->getBean('aService') directly from inside these services/beans. In the case of Ding, there's even an example of Doctrine2 integration (including the injection of the EntityManager)