依赖注入(DI)
摘自【老A】http://www.cnblogs.com/wow-xc/p/9027315.html
摘自【Jesse】http://www.jessetalk.cn/2017/11/06/di-in-aspnetcore/
IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用“好莱坞原则”是应用程序以被动的方式实现对流程的定制。我们可以采用若干设计模式以不同的方式实现IoC,比如我们在上面介绍的模板方法、工厂方法和抽象工厂,接下来我们介绍一种更为有价值的IoC模式,即依赖注入(DI:Dependency Injection,以下简称DI)。
DI 旨在实现针对服务对象的动态提供。具体来说,服务的消费者利用一个独立的容器(Container)来获取所需的服务对象,容器自身在提供服务对象的过程中会自动完成依赖的解析与注入。换句话说,由DI容器提供的这个服务对象是一个” 开箱即用”的对象,这个对象自身直接或者间接依赖的对象已经在初始化的工程中被自动注入其中了。
2. 注入:注入体现的是一个IOC(控制反转的的思想)。
为什么要反转呢?比如我们现在要把从EF中去验证登录改为从Redis去读,于是我们加了一个 RedisLoginService。这个时候我们只需要在原来注入的地方改一下就可以了。
3. 容器:(1) 绑定服务与实例之间的关系; (2) 获取实例,并对实例进行管理(创建与销毁)
============================================
.NET Core DI
在.NET Core中DI的核心分为两个组件:IServiceCollection和 IServiceProvider。(在Microsoft.Extensions.DependencyInjection命名空间下)
DI 在 ASP.NET Core 中的应用
- ASP.NET Core可以在 Startup.cs 的 ConfigureService 中配置 DI。
builder.RegisterGeneric(typeof(LoggingBehavior<,>)).As(typeof(IPipelineBehavior<,>)); builder.RegisterGeneric(typeof(ValidatorBehavior<,>)).As(typeof(IPipelineBehavior<,>));