【问题标题】:Using the DI-Container inside a service在服务中使用 DI-Container
【发布时间】:2018-01-09 20:48:26
【问题描述】:

我对 Symfony 还是很陌生。我已经知道你可以创建一个服务并在 services.xml 文件中注册它。

据我所知,在一个服务中使用其他服务有两种方式:

1) 在 services.xml 文件中,为每个要使用的服务添加一个标签。在你对应的服务类的__construct方法中,你将服务分配给不同的变量,然后就可以通过这些变量来访问服务。

2) 在 services.xml 文件中,为 service_container 添加一个标签。在对应服务类的 __construct 方法中,您现在将 service_container 分配给一个变量,然后可以通过容器变量访问其他服务。

我的问题是,这两种方法中哪一种是“更好的做法”?

【问题讨论】:

  • 第一种方式肯定是更好的方式,只要你提前知道自己需要哪些服务。第二种方法称为服务定位器。你可以搜索这个词来研究它的缺点。

标签: xml symfony service dependency-injection containers


【解决方案1】:

简短的回答:第一个解决方案是首选

第一种(首选)解决方案称为依赖注入,它比第二种(服务定位器)方法更受青睐。 与服务定位器方法相比,依赖注入有几个优点:

  • 可重用代码:您正在注入值,从而在外部配置服务
  • 可测试代码:您可以注入模拟对象,而不是注入真实对象
  • 可读性:您的依赖项在界面中可见

我使用服务定位器的主要原因是进行延迟实例化以获得一些性能。

请注意,这两种技术可能有更多的优点/缺点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多