Symfony2 - DependencyInjection和Services之间的区别是什么?

时间:2014-06-05 12:21:21

标签: symfony service dependency-injection

嗯,问题在于标题,但总结一下,我不确定DependencyInjectionService之间的区别是什么,因为它们是两者都以相同的方式调用(通过使用容器调用它们,例如来自控制器的$this->get('my_service_or_dependency'))。

我查看了文档,但我找不到这个问题的明确答案。

感谢您的见解!

1 个答案:

答案 0 :(得分:2)

TLDR:DI是一种设计模式,服务是一种类

很难相互比较。 Dependency Injection是一种设计模式,您不必在类中硬编码依赖项,而是将它们注入到您的类中(最有可能作为构造函数的参数)。

示例(使用Dependency Injection):

class someController
{
    public function __construct(ObjectManager $doctrine)
    {
        $this->doctrine = $doctrine;
    }
}

没有Dependency Injection的相同示例:

class someController
{
    public function __construct()
    {
        $this->doctrine = new Doctrine(); 
        //there's no such thing as new Doctrine() but this is just an example
    }
}

在第二个示例中,只要您想要更改ObjectManager实现(例如,将Doctrine切换为Propel,就需要重构代码。因此,您的代码具有硬编码的依赖关系。

在第一个示例中,您将注入ObjectManager对象,因此当您想切换到另一个实现时,您只需更改配置(在Symfony中最有可能services.yml

在这种情况下,

Service是一个类(SomeController),它会引入依赖关系(有关更好的定义,请参阅doc