一、什么是IOC

控制反转(Inversion of Control,缩写为IoC),是面向对象编程的一种设计原则,可以用来减低计算机代码之间的耦合度,其中最常见的方式叫做依赖注入(Depandency Injection ,简称DI)。

IoC:调用者不在创建(不自己new)被调用者实例,而是交给容器去创建,这就是控制反转。

DI:容器创建好的实例在注入调用者的过程,就是依赖注入(属性注入、构造函数注入等)

二、为什么要使用IOC

我们日常使用的设计模式为接口驱动设计,接口驱动设计有很多好处。可以提供不同灵活的子类实现,增强代码稳定和健壮性等。 

但是接口一定要实现的,也就是如下语句迟早要执行;

AInterFace a = new AInterFace();

所以按照一般的方法使用接口,即会出现耦合。 

三、IoC如何降低耦合

Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显示的new 一个B的对象。

采用依赖注入技术后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来,并注入到A类里的引用中,而具体获取的方法。对象被获取时的状态由配置来指定。

 四、容器

IoC模式,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期,依赖关系等,从而使得应用程序的配置和依赖性规范,与实际的应用程序代码分离,其中一个特点就是通过配置进行应用程序组件间相互关系的配置,而不用重新修改并编译具体代码。

五、.NET CORE 的容器

.net core 自带容器 (在startup.cs直接注入)

Autofac 第三方

六、.NET CORE 自带容器使用方式

AddTransient:瞬时的,每次访问构造一个

AddSingleton:单例,全局只有一个

AddScoped:在同作用域,服务每个请求值创建一次