0%

关于IoC和DI

IoC:Inversion of Control(控制反转)

谁控制谁?

 IoC容器控制对象的创建,也就是IoC容器控制对象

控制了什么?

 控制了外部资源的获取(如对象、文件等)

正转和反转:

 正转:如在传统应用程序里,我们主动去new对象
 反转:容器创建对注入依赖对象

为什么是反转?

 因为是容器帮助我们查找并注入依赖对象

DI:Dependency Injection(依赖注入)

由容器动态地将某个依赖关系注入到组件之中

依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。

谁依赖谁?

 应用程序依赖容器

为什么需要依赖?

 应用程序需要IoC容器来提供对象需要的外部资源

谁注入谁?

 IoC容器注入应用程序某个对象,应用程序依赖的对象

注入了什么?

 注入了某个对象所需要的外部资源(包括对象、资源、常量数据等)

依赖注入明确描述了被注入对象依赖IoC容器配置依赖对象

依赖注入三种方式

 1.构造函数注入:在构造函数种借助参数将依赖的对象注入到创建的对象种
 2.属性注入:通过添加Injection Attribute特性的方式将属性设置为自动注入属性
 3.方法注入:通过调用方法实现对字段(对象)或属性(对象)的初始化

依赖原则

 1.高层次模块不应该依赖于低层次模块,它们都应该依赖抽象
 2.抽象不应该依赖具体,具体应该依赖抽象

引用:依赖注入那些事