在网络上的许多文章中,术语“控制反转”和“依赖反转原则”似乎混为一谈并用作同义词(进一步的混乱由称为“ DI-Containers”和“ IoC-Containers”的工具所强加)。Wikipedia的一篇文章很好地解释了IoC与DI不同:
控制反转(IoC)描述了一种设计,其中计算机程序的自定义编写部分从通用的可重用库接收控制流
因此,DIP是关于让模块依赖于抽象而不是具体的实现。
而IoC则是将程序流的控制权交给一个单独的模块。您可以让此模块执行的操作之一是在运行时解析依赖关系。
这种差异看起来确实很公平,但是我从未见过有人提到过IoC原理的任何其他应用程序,除了依赖关系解析之外。Wikipedia的定义非常广泛,似乎您可以使用一个模块进行更多的工作,该模块可以根据其配置和一些内部逻辑调用自定义代码。
因此,这里有一些我还无法弄清楚的问题:
- IoC和DIP之间的实际关系是什么?IoC始终是实现DIP的手段吗?
- 为什么将依赖关系解决工具称为DI容器和IoC容器?这意味着DI和IoC是同一件事。
DI和IoC
—
蚊蚋
@gnat,不,不是,请查看我的编辑
—
Andre Borges
同意,我错过了遗憾
—
蚊蚋
海事组织,简单的答案是“他们是相同的”。IoC是依赖关系反转的另一个名称,两者都是实现依赖关系注入的一种方式。我将“依赖倒置”视为一个非常无用的术语,因为它很容易与注入混淆。因此,有DI(注入)和IoC是一种通过注入实现依赖关系/控制反转的方法。
—
David Arno