在服务中使用DI-Container

时间:2018-01-09 20:48:26

标签: xml symfony service dependency-injection containers

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

据我所知,有两种方法可以在服务中使用其他服务:

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

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

我的问题是,这两种方式中的哪一种是“更好的实践”?

1 个答案:

答案 0 :(得分:0)

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

第一个(首选)解决方案称为依赖注入,它主要优于第二个(服务定位器)方法。 与服务定位器方法相比,依赖注入有一些优势:

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

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

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