Asp.Net Core 基础知识--StartUp类

StartUp类简介:
1)、什么是Startup类?
StartUp类是DotNetCore环境下,用于配置应用所需要的服务和应用请求通道的一个基础服务的类,它一般在应用程序启动过程中,给应用程序配置主机时(Program类下的CreateWebHostBulider方法)调用.UseStartup()进行指定。
Asp.Net Core 基础知识--StartUp类_第1张图片
2)、StartUp类的作用:
Startup类具有两个方法。ConfigureServices方法和Configure方法,这两种方法的就是用于注册及配置应用所需的服务,
2.1)、注册服务
2.1.1)、那么什么是服务?
服务是一个提供应用功能的可重用组件,在ConfigureServices方法中进行注册和配置,并且可以通过依赖注入(DI)或者ApplicationServices 在整个应用程序中使用。
例如 Asp.Net Core 的Mvc规则,还有数据库,以及开发中所需要的各式各样的服务,都需要在这里进行注册配置。
2.1.1.1)、值得一提的是,ConfigureServices方法里面是自带有依赖注入的,但是可能大家更习惯使用著名的AutoFac这个服务,那么我们要做的首先有两件事。
第一、将AutoFac服务注册进来,不过就像上图一样,我一般喜欢直接在配置主机的时候直接使用主机的ConfiguerServices方法进行注册(当然,那个方法名是我封装后的,不要跟着写,你会找不到方法的,还有关于在哪个方法里面进行注册,个人觉得没啥区别,可能我现在太菜,没有完全理解透 2019/12/26更新:见下文)
第二、将ConfigureServices方法的返回值改为 IServiceProvider。
第三、开始进行依赖注册的相关配置
2.2)、创建应用的请求处理管道
2.2.1)、何为请求处理管道:
请求处理管道,是由一系列中间件组件组成的。例如,中间件可能处理对静态文件的请求或者将HTTP请求重新定向到HTTPS。每个中间件在HttpContext上执行异步操作,然后调用管道中的下一个中间件或者终止请求。这时候我们就应该将配置处理管道请求的代码添加到Stratup.Configure方法中,可通过中间件组件添加到IApplicationBuilder实例来配置请求通道。
Asp.Net Core 基础知识--StartUp类_第2张图片
2.2.2)、何为中间件:
中间件是一种装配到应用管道以处理HTTP请求和响应的软件,每个组件都需要选择是否将请求传递到管道中的下个组件,并且可以在下个组件前后执行工作。请求委托(Request delegates)用于构建请求管道,处理每个HTTP请求。通过Use、Run和Map拓展方法来配置委托。可将一个单独的请求委托并行指定为匿名方法(并行中间件),或者在可重用的类中对其进行定义,这些可重用的类和并行匿名方法就是中间件,也被称为中间组件,从上图中我们可以看出,每个组件均可在下个委托执行的前后进行操作。这样每个组件都可以在下个组件的执行前后去进行异常操作。
2.2.2)、添加到请求管道:
每个中间件,可通过Use拓展方法将中间件组件添加进请求管道中,例如MVC的 UseMvc()方法,请求管道中的每个中间件组件负责调用管道中的下一个组件,或者在适当的时候造成短路,当委托不将请求传入下个委托时,他被称为“让请求管道短路”,通常需要及时的短路,这样可以避免许多不必要的工作,如果中间件添加到管道中并且位于进一步处理的中间件前时,它们仍需要处理next.Invoke语句后面的代码。
2.2.3)、Use、Run和Map
2.2.3.1)、Use
Use主要作用是使链路进行连接或者短路。
2.2.3.2)、Run
Run主要是一种约定,某些中间件组件可在管道的末尾运行Run
Asp.Net Core 基础知识--StartUp类_第3张图片
效果图:
Asp.Net Core 基础知识--StartUp类_第4张图片
(后补上的)
2.2.3.3)、Map
Map主要是用作约定来创建分支,Map基于给定请求路径的匹配项来创建请求管道分支,
如果请求路径以给定的路径进行请求,则执行相应的分支
Asp.Net Core 基础知识--StartUp类_第5张图片
效果如下:
v1
Asp.Net Core 基础知识--StartUp类_第6张图片
v2
Asp.Net Core 基础知识--StartUp类_第7张图片
3)、Startup的ConfigureServer()和Confgure()方法与IWebHosst的ConfigureServer()和Confgure()
3.1)、上文说到Startup的ConfigureServer()和Confgure()方法一个的作用以及具体是干什么的,但是并没有说的特别详细,主要还是理解的浅,当然这次也不是多深,还是浅浅的了解一下
//下班了有时间再写
突然来临的结语:
其实这么突然结束,主要是我也不知道还有啥可以写的,主要是没有深入的去写(主要还是太菜)

你可能感兴趣的:(NetCore,c#,asp.net)