使用 Service Locator 向 Service 提供容器实例是否错误?

发布于 2024-11-07 08:13:36 字数 314 浏览 0 评论 0原文

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

  • 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

意犹 2024-11-14 08:13:36

如果您的容器没有为您提供更好的方法来执行此操作,则可以使用服务定位器。

如果您使用像 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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文