Symfony 2:为什么将内核注入服务是个坏主意?

时间:2016-09-08 12:11:17

标签: php symfony dependency-injection

我需要在我的服务中获得当前的应用环境。 我发现我可以从内核中获取它,但很多人说注入内核是个坏主意。
有人可以解释一下为什么它被认为是不好的做法? 溶解是否比将整个容器注入我的服务更好?

my_app.my_not_so_great_service:
    class: AppBundle\Services\AppService
    arguments:
      - "@kernel"

2 个答案:

答案 0 :(得分:3)

Richard Miller的文章 [0] 解释了这个问题。它的要点是,取决于当前的应用程序环境是一个设计糟糕的架构的代码味道,并将使您依赖于具体的实现。

您不能轻易(热)交换不同环境的实现逻辑,因为您可能会对一堆if / switch语句进行编码。相反,您应该使用可以代表不同环境的抽象。

  

应用程序不应该知道它正在运行的环境   在它下面,应该根据它配置一种特定的方式   配置文件。因为我们想要改变之间的配置   不同的环境通常有不同的配置   每个环境。我们选择这些套装中的哪一套   配置加载而不是告诉应用程序   它所处的环境。

[0] http://richardmiller.co.uk/2013/05/28/symfony2-avoiding-coupling-applications-to-the-environment/

答案 1 :(得分:2)

内核对象包含整个应用程序,如果您需要环境,只需注入它:

my_app.my_service:
    class: AppBundle\Services\MyAppService
    arguments:
        - '%kernel.environment%'