嗯,问题在于标题,但总结一下,我不确定DependencyInjection
和Service
之间的区别是什么,因为它们是两者都以相同的方式调用(通过使用容器调用它们,例如来自控制器的$this->get('my_service_or_dependency')
)。
我查看了文档,但我找不到这个问题的明确答案。
感谢您的见解!
答案 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)