「解析实例」,服务/类型被注册以后,就可以被同样注入到依赖注入系统中的其它服务/类型使用。
如类型 A 依赖类型 B,类型 A 就可以通过依赖注入获取类型 B 的实例。
想要彻底理解依赖注入,我们就必须要对控制反转有所了解。
控制反转
依赖注入中有一个叫做容器的东西,也被称为 IoC(Inversion of Control - 控制反转)容器。
这个容器中保存着所有由依赖注入系统创建的实例,那么它为什么叫 IoC 容器呢?
「控制反转(IoC)是一种反转流、依赖和接口的方式,它把传统上由程序代码直接操控的对象的调用权交给第三方,通过第三方来实现对象组件的装配和管理。」
所谓的“控制反转”的概念就是「对组件对象控制权的转移,从程序代码本身转移到了代码之外的第三方。」
通俗地说,就是应用程序的用户代码不负责依赖对象的创建和维护,而是将它交给第三方来负责,这样控制权就由应用程序转移到了第三方,即控制权实现了所谓的反转。
例如类型 A 需要使用类型 B 的实例,类型 B 实例的创建并不由类型 A 自己来负责,而是通过第三方来创建。
那么它和依赖注入又有什么关系呢?
依赖注入
在小孩子吃东西的场景里,有一方扮演着 IoC 容器的角色,你们分析下是谁?
我想很多人的第一直觉是“父母”?
其实,不严谨的来说,冰箱才是扮演 IoC 容器的角色,父母则是扮演依赖注入中控制系统的角色。
IoC 容器是依赖注入中一个保存已创建实例的东西,如果实例已创建,并且具有有效的生命周期,那么控制系统会直接从 IoC 容器获取实例,否则才会创建实例。
冰箱中的东西,都是父母买回来放进去的,同样也需要他们从冰箱中拿出来。
「所谓依赖注入系统,本质上就是一个实现了类型注册、实例解析和实例生命周期管理的组件。」
关于生命周期的内容,我们会在该系列的下一篇文章中详细讨论。
如果你了解工厂模式,那么你可以简单的把为依赖注入系统看作是一个超级工厂。
在 .NET 的依赖注入系统中,所有注册的类型,都被称为服务。
ASP.NET 中的组件,大都都需要通过依赖注入获取它所依赖的服务实例。
所以说整个 ASP.NET 框架,都是建立在依赖注入系统之上的,这也是开发 ASP.NET 应用的最基本的编程模式。
原文地址:https://www.dongchuanmin.com/net/2008.html