ASP .NET Core

  • Post author:
  • Post category:其他




一、依赖注入

默认情况下ASP.NET Core项目会加载一个appsettings.json这个文件作为配置文件

说一下依赖注入

在这里插入图片描述

依赖注入是ASP.NET Core里一个不可分割的部分,而

依赖注入的这个机制是依赖于IOC容器

(IOC的中文意思:控制反转)



依赖注入原理应用

当我们的应用

程序启动

(ASP.NET Core应用)的



候,有一些

类或者是一些类型

,会

在容器里

面进行

注册

,而

这些类型

用DI典型术语来说

叫做服务(service)

而这些

服务注册以后



其他



类型



包括

这些

类型本身


都可以向IOC容器来请求这些注册的服务的实例

,而且在注册的时候,你也可以设置这些实例的服务的生命周期。


服务的实例的生命周期是由IOC容器来控制的

而这些服务的实例的生命周期又分为3种


·生命周期


-Transient:

注册的服务在每次被请求的时候,都会生成一个新的实例


-Scoped:

指ASP.NET Core里面会有Web请求,而我们服务的实例会跟着Web请求,一次Web请求产生一个实例。Web请求被处理完的时候,生命周期就截止了。


-Singleton:

我们服务的实例一旦被创建,以后所有请求这个服务的时候,都会只用这一个实例。它会一直存活到直到我们的应用程序停止。

下面的例子我将注册一个自己的服务

新建一个文件夹;

再新建一个接口;

再创建两个类

用class:ChinaClock实现IClock接口

class:UtcClock也是实现IClock接口

像这个服务选择Singleton比较合适,泛型怎么写:先写接口IClock,再写具体的类,我们先注册ChinaClock.

这是怎么个意思呢,首先AddSingleton表示我们注册这个服务的生命周期。

后面泛型<>里面写的什么意思呢:每当有其他类型请求一个IClock,实现了这个接口的对象的时候,我们这个IOC容器就会返回一个ChinaClock这个类的一个实例。

我们来使用这个服务,就在项目里建立一个文件夹Controllers,再建立一个HomeController这么一个类,直接使用这个类

我们建立的HomeController直接让它继承Controller这个类,然后写一个构造函数,这里面我注入一个参数IClock,然后起个名叫clock。

这样写呢,构造函数里面的参数,我们整个ASP .NET Core的整个应用就会保证:如果你这个参数它的类型注册到了我们这个IOC容器里面了,那么它所对应的具体的类它的实例就会返回回来。

所以说我们注入的是IClock,注册的是ChinaClock这个具体的类。所以到这步,实际注入的是ChinaClock。


这种就叫做依赖注入,叫构造函数注入。注入了一个IClock对应的类的一个实例。

如果我不想注入ChinaClock而是注入UtcClock,则可以写<IClock ,UtcClock>


这样写不会改动Controller的代码,只需要改动接口处的就可以了。(使用接口之后,Controller跟具体的服务类它俩之间就解耦了)



DI优点


·解耦,没有强依赖。

(类型之间进行解耦,比如说Controller这个类和服务类之间就没有强依赖。它俩同时依赖于一个接口(相当于依赖一个抽象))


-利于单元测试

(因为解耦)


·不需要了解具体的服务类

(不需要了解一些结构、内部细节等等)


·也不需要管理服务类的生命周期

(生命周期由IOC容器来控制的)



二、 ASP .NET Core管道(pipeline)

Configure方法是做什么用的呢?

这个方法,它配置了ASP.NET Core针对处理http请求,它有一个管道,它就是配置这个管道用的。

我们的 ASP .NET Core管道 会使整个应用对http请求是如何进行响应。

当你的ASP.NET Core应用 从浏览器接收到http请求之后,这个请求是从管道里面进来的,之后再从管道回去。

在这里插入图片描述

如果这个管道里面什么都没有,那么这个请求过来、回去,就什么都不会发生。

所以如果你想让ASP .NET Core这个应用能发挥作用的话,就应在管道里面放一些东西。而我们把放在管道中间的(能够处理请求的)东西叫做中间件(middleware)。

举个例子,比如我们使用的MVC框架,在这里就是一个中间件,我们可以把它放在管道里。但是通常可能会进行一些身份认证,所以说身份认证的中间件通常会放在MVC的前面。而在ASP .NET Core里面,如果我们shifu这个静态文件的话 ,比如说js文件、html文件、css文件,这个时候我们需要使用Static Files这个中间件。

在这里插入图片描述

而在这个http请求进来的时候,我们这些中间件能够处理哪些东西呢?

在中间件里面我们可以看到请求的数据,以及我们Web Server相关的东西或者说是特性。我们使用中间件可以对这些东西进行处理或者是写入一些东西等。

在这里插入图片描述



三、Configure方法

我们继续看Configue方法。

在这里插入图片描述

第一行表示如果我们这个环境是开发环境(这个模式是通过设置一个环境变量,你可以设置它的值为development或production等),它就是判断你这个环境变量的值是不是development。

如果是,就用了下面的一个中间件(工作原理:如果我们在开发的时候,这个程序发生了一些异常,并且这个异常没有做处理的话,那么就会把这个异常错误信息展示在页面里,页面里会有这个错误的详细信息),这个中间件就是干这个用的。

所以在开发模式下,插入到管道的第一个中间件是这个。



四、端点 endpoint

·端点就是进来的http请求的

url的结尾那部分



也就是端点

),这部分会被中间件进行处理。

用过MVC的话就会知道,如果

想处理这些端点

(也就是url结尾这部分),你就

需要指定一下路由。


指定路由有两种方式:

第一种是在Controlller上面写一些属性。

第二种是指定一个路由表,设定的这些路由,实际上就是一些模版,这些模版它们会尝试匹配一些特定的URL端点,

所以说路由的工作原理简单来说就是这样

·/{controller}/{action}

·/home/index



五、ASP.NET Core应用的多样性


ASP.NET Core应用其实是由多种技术存在的



·MVC:/Home/Index

MVC本身需要路由,比如说特定的一个页面有可能是Home或Index.MVC需要路由。



·Razor Pages:/SomePage

这是另外一种应用形式,它也需要路由,需要一些网址来访问一些特定的页面。



·SignaIR:/Hub/Chat

另外一种技术,也需要路由,比如说我们做一个聊天应用,它肯定也需要做一个网址,才能进行通信。



版权声明:本文为weixin_51550030原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。