注射服务容器往往是一种不好的做法

时间:2018-04-12 18:15:47

标签: symfony symfony-3.3

我有一些服务,它们在其他服务中也有一些依赖关系,因此,我决定在每个服务中注入@service_container,而不是非常具体的依赖项。结果是这样的:

class InternalComponentHelper implements ContainerAwareInterface
{
    use ContainerAwareTrait;

   public function somefunction(){
       //Do something with the container
   }
}

然后在我的服务定义中

      intcomponent_helper:
        class: AplicacionBaseBundle\DependencyInjection\Helpers\InternalComponentHelper
        calls:
          - [setContainer, ["@service_container"]]

我需要知道的是,这是一种不好的做法,如果有的话会造成什么样的伤害或性能问题。顺便说一下,没有循环依赖。

1 个答案:

答案 0 :(得分:1)

完全注入服务容器被认为是不好的做法。根据这个blog post

  

这种接缝很简单,直接使用容器并不是一个好习惯,因为它隐藏了类的依赖关系,使它们与外部配置相结合,因此更难以测试,更难以审查等。