什么是控制反转

Ant*_*ott 8 design-patterns dependency-injection inversion-of-control

可能重复:
什么是控制反转?

我理解依赖注入(DI)是什么(我认为!).它基本上是对象可能具有的依赖性的满足.我尝试考虑使用DI作为面向服务时编写的代码,并将我的代码定义为使用其他服务.

但是,我现在想知道在使用IoC时我们正在反转控制权.这是一个相当含糊的术语,它可能意味着一些事情.

但是,我认为由IoC框架处理的是创建对象(因此使用DI来满足依赖性)的责任.

应用程序仍然有责任询问它使用的对象(即 - 服务),区别在于它不知道(或关心)如何创建它.那么,为什么服务定位器被认为是反模式,如果它所做的就是要求服务呢?

我说得对吗?或者它是否意味着别的东西.另外,我是否正确分离了DI和IoC的职责?如果我有一个IoC框架,没有DI框架就无法运行.或者DI只是IoC框架的一个特性?

Cyl*_*Cat 9

依赖注入通常意味着将依赖对象作为参数传递给方法,而不是让方法创建依赖对象.在实践中它意味着该方法不直接依赖于特定的实现; 任何满足要求的实现都可以作为参数传递.

控制反转简单地认识到依赖关系是相反的.通过直接创建,实现或调用它而不是A取决于B,A接收B作为参数,并且不再以任何方式对B负责.

将参数类型实现为接口简化了流程并对其进行了概括,但并非绝对必要.