依赖注入和控制反转是同一概念吗?

用图例来说明一下,先看没有 IoC/DI 的时候,常规的 A 类使用 C 类的示意图,如图所示:

依赖注入和控制反转是同一概念吗?

当有了 IoC/DI 的容器后,A 类不再主动去创建 C 了,如图所示:

依赖注入和控制反转是同一概念吗?

而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中,如图所示:

依赖注入和控制反转是同一概念吗?

依赖注入和控制反转是同一概念吗?

根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

小结一下:

其实 IoC/DI 对编程带来的最大改变不是从代码上,而是从思想上,发生了「主从换位」的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在 IoC/DI 思想中,应用程序就变成被动的了,被动的等待 IoC/DI 容器来创建并注入它所需要的资源了。

这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

本作品采用《CC 协议》,转载必须注明作者和本文链接
悲观者永远正确,乐观者永远前行。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

从命名的方式看,有些类似生产者和消费者。其实是一个东西

依赖注入-> 生产者-> 注入类,以供之后使用

控制反转-> 消费者-> 使用注册好的类去自动创建类,执行类的方法

以前也没注意他们具体的区别

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!