ASP.NET Core 依赖注入

首先我们要记住一个概念:依赖注入(DI)是控制反转(IOC)的实现方式。

Ioc就是将实例化的任务交给容器去做。

下面将举一个例子来演示DI的用法:

一、最原始的开发方式

  1. 首先我们建一个控制台应用(.NET),这里演示的框架我用的是.NET 6.0,演示其原理的时候其他版本的.NET框架也可以用,没有影响,我们来体会下我们最原始的开发方式

ASP.NET Core 依赖注入_第1张图片
ASP.NET Core 依赖注入_第2张图片
  1. 创建一个接口B,里面定义一个没有返回值的方法,添加一个类B用于实现接口B

ASP.NET Core 依赖注入_第3张图片
ASP.NET Core 依赖注入_第4张图片
  1. 创建一个接口A,里面定义一个没有返回值的方法,添加一个类A用于实现接口A,并在A类方法中调用B类的方法。

ASP.NET Core 依赖注入_第5张图片

4.在主函数中调用类A的方法

ASP.NET Core 依赖注入_第6张图片

5.最后实现的结果为

可以看到,这种直接在需要用到的地方直接声明去使用,看似简单,却有很大的缺陷,会造成耦合性很高,如果在开发大的项目时,需要对源码做出修改,就会改很多的地方,会造成工作量巨大,这个时候如果我们换一种方式,把创建对象的方法交给另外的东西去做,就会降低类之间的耦合性,所以我们就要使用到控制反转(Ioc)这种思想。

二、使用容器来创建对象

1.首先添加一个容器类Container,在类中写入注册服务和创建实例的方法

ASP.NET Core 依赖注入_第7张图片

2.在需要声明对象的对象,进行注入实例

ASP.NET Core 依赖注入_第8张图片
ASP.NET Core 依赖注入_第9张图片

结果同上面的结果相同,这就是依赖注入的基本实现原理,接下来我们将使用MVC来进行依赖注入的演示

三、使用MVC方式进行依赖注入的演示

1.首先我们新建一个MVC项目,框架使用的.NET 6.0,不同的VS版本创建项目时显示的项目名称可能不同,只要注意看项目的简介和我下面的图片一样就行

ASP.NET Core 依赖注入_第10张图片

在这个界面最好勾选不使用顶级语句,因为如果不勾选如果没学过顶级语句会让你感到疑惑,就按照下面图片进行勾选就好,然后点击创建

ASP.NET Core 依赖注入_第11张图片

2.然后创建一个类库,注意我下面选择类型,然后点击下一步进行

ASP.NET Core 依赖注入_第12张图片
  1. 在类库中添加一个UserInfo类,添加几个属性,这里只是为了演示,所以我就不加太多属性了

ASP.NET Core 依赖注入_第13张图片

5.然后给MVC项目添加类库的引用

6.自己在控制器中创建一个登录的Action,然后创建一个是如,视图中只要有个表单提交就行,这里主要演示注入的方法,所以便不再去演示怎么去创建表单了,我这里写好了一个方法,大家也可以参考一下

ASP.NET Core 依赖注入_第14张图片

7.然后我们再添加一个类库,在类库中添加一个接口和一个实现该接口的类,在接口中定义

一个返回值为bool类型的保存用户信息的方法

ASP.NET Core 依赖注入_第15张图片
ASP.NET Core 依赖注入_第16张图片

不使用依赖注入的实现方式

ASP.NET Core 依赖注入_第17张图片

8.使用依赖注入前我们需要去MVC项目中的Program.cs文件中去手动进行注册服务(如果是.NET 6.0以前的版本是需要在StartUp.cs文件夹中去进行注册,如果不知道怎么注册的话,可以评论区或者私信问我),这里主要演示.NET 6.0的注册

注册时我们需要理解一个重要的概念叫做“生命周期”(具体含义可以去看看官方文档),依赖注入框架服务的生命周期有三种

  • 瞬态(Transient):每次被请求的时候都会创建一个新对象

ASP.NET Core 依赖注入_第18张图片
  • 范围(Scoped):在给定范围内,多次请求共享同一个服务对象,服务每次被请求的时候都会返回同一个对象;在不同的范围内,服务每次被请求的时候会返回不同的对象。

ASP.NET Core 依赖注入_第19张图片
  • 单例(Singleton):全局共享同一个服务对象

ASP.NET Core 依赖注入_第20张图片

9.下面我们开始需要使用DI的地方进行演示

  • 构造函数注入

ASP.NET Core 依赖注入_第21张图片
  • 使用操作注入 [FromServices]:使用这种方式注入,就不需要在构造函数进行赋值,需要注意的是,只有ASP.NET Core控制类的操作方法才能用[FromServices]注入服务,普通的类是不行的

ASP.NET Core 依赖注入_第22张图片
  • 通过HttpContext直接获取需要实现的服务

ASP.NET Core 依赖注入_第23张图片

以上就是控制反转(Ioc)的简单介绍和依赖注入(DI)的三种注入方式的简单使用,后面我将结合一些简单的项目进行更多的依赖注入使用的介绍,写的较为潦草,理解的可能也不是很到位,请各位.NET大佬批评指正!!!

你可能感兴趣的:(后端,c#,.netcore,visual,studio)