一直以来做.Net 开发也好几年,却不知道依赖注入(也是醉了)。最近在学习.net Core,才开始接触学习依赖注入,自己总结一下。
微软这样定义asp.net core:一个可跨平台的高性能开源框架,用于生成基于云且连接 Internet 的新式应用程序。(重要的是开源的)
ASP.NET Core 是重新设计的 ASP.NET 4.x,更改了体系结构,形成了更精简的模块化框架,其底层设计支持并使用依赖注入,其利用内置的框架服务
将他们注入到启动类的方法中,而且应用程序还能配置注入。.net core 的容器提供最小功能集,但并不是要取代其他容器。
1.概念
依赖注入(Dependency injection,DI)是一种实现对象及其合作的者或依赖项之间松耦合的技术。
(腾飞大神说)
将类用来执行其操作(action)的这些对象以某种方式提供给该类,而不是直接实例化合作者或使用静态引用。
通常,类会通过他们的构造函数声明其依赖关系,允许它们遵循显示依赖原则,也就是构造函数注入。
DI思想:它们的耦合更加松散,因为它们没有对它们的合作者直接硬编码的依赖,遵循依赖倒置原则(高层模块不应该依赖底层模块;两者都应该依赖
于抽象),类要求在它们构造时向其提供抽象(通常是interfaces),而不是引用特定的实现。提取接口的依赖关系个提供这些接口的实现作为参数也
是“策略设计模式”。
当系统被设计使用DI,很多类通过它们的构造函数(或属性)请求其依赖关系,当一个类被用来创建这些类及其相关的依赖关系是很有帮助的,这些类
被称为“容器(containers)”或者“依赖注入(DI)容器”或者“控制反转(IOC)容器”
容器本质上是一个工厂,负责提供向它请求的类型实例。统一管理系统中所有的依赖项。
如果一个给定类型声明它具有依赖关系,并且容器已经被配置为提供依赖类型,那么它将把创建依赖关系作为创建请求实例的一部分。提供这种方式,
可以向类型提供复杂的依赖关系而不需要任何硬编码的类型构造。除了创建对象的依赖关系外,容器也可以管理应用程序中对象的声明周期。
.net core默认支持构造函数注入的简单内置容器(由IServiceProvider接口表示),并且asp.net使某些服务可以通过DI获取。
使用控制反转的目的是为了:在业务变化的时候,尽可能减少的因改动代码而造成的问题。
2.DotNet Core应用
var
serviceCollection =
new
ServiceCollection()
1、
.AddTransient<ILoginService, EFLoginService>()
2、
.AddSingleton<ILoginService, EFLoginService>()
3、
.AddScoped<ILoginService, EFLoginService>();