ConfigureServices    就是配置服务器的DI容器

把需要的中间件等一些东西添加到DI容器   最后都是添加到IServiceCollection里面

比如

            services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetResource())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetTestUsers())
.AddProfileService<ProfileService>()
.AddResourceOwnerValidator<LoginValidator>();

对于.AddProfileService()     已经内置了一个默认实现IProfileService接口的一个类    默认会注入内置的(DefaultProfileServer)

这样写了后  其实里面的实现就是   遇到IProfileService  实例化成自定义的类ProfileService    不使用内置的

关于在Configure 中和添加中间件

https://www.cnblogs.com/RainingNight/p/middleware-in-asp-net-core.html

一种是实现IMiddleware接口的中间件    实现了这个接口的中间件 直接通过反射调用InvokeAsync

另外一种就是采用约定的方式实现中间件  采用这种方式添加的中间件采用了表达式的方式来调用Invoke或者InvokeAsync方法

找这个中间件里面的方法   只要方法名为invoke或者invokeAsync的 就累加起来  如果数量大于1或者等于0就抛异常    这里就是为什么中间件的方法名一定要是Invoke

然后在验证这个唯一存在的方法   方法的返回值如果不是Taks 继续抛异常

继续验证这个方法的参数   如果参数的长度为0或者第1个参数的类型不是HttpContext  又抛异常

如果当前中间件中的方法只存在一个 并且参数类型为HttpContext  把当前方法包在一个RequestDelegate委托中直接返回

  否则进行其他封装一下在返回

注册中间件的对象 ApplicationBuild

        RequestDelegate Build();
IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware);

里面有两个最重要的方法

Use负责注册中间件   把中间件添加到_components对象中      在ApplicationBuild 中 有个_components属性

Build构建管道流程  把所有注册的中间件进行反转然后遍历     进行嵌套  这样后面注册的中间件就包到了最内层  执行的时候 需要从最外层开始  这样管道就封装完成

        public RequestDelegate Build()
{
RequestDelegate requestDelegate = (RequestDelegate)(context =>
{
context.Response.StatusCode = ;
return Task.CompletedTask;
});
foreach (Func<RequestDelegate, RequestDelegate> func in Enumerable.Reverse<Func<RequestDelegate, RequestDelegate>>((IEnumerable<Func<RequestDelegate, RequestDelegate>>)this._components))
requestDelegate = func(requestDelegate);
return requestDelegate;
}

.Net Core 管道中的ConfigureServices 和Configure的更多相关文章

  1. .NET Core 中的命名问题:Startup 中的 ConfigureServices 与 Configure

    一直不喜欢 Startup 中这两个可读性很比较差的糟糕命名 ConfigureServices 与 Configure.ConfigureServices 用于配置依赖注入以在运行时根据依赖关系创建 ...

  2. net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

    这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错 其实仔细看他的错误提示,其中有一句叫你执行一个命令安装证书的语句: dotnet ...

  3. ASP.Net Core 5.0 MVC 配置文件读取,Startup 类中ConfigureServices 方法、Configure 方法的使用

    配置文件读取 1. 新建FirstController控制器 在appsettings文件内容替换成以下代码 { "Position": { "Title": ...

  4. ASP.NET Core系列(三):启动类Startup

    前面讲了ASP.NET Core 的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144. ...

  5. .NET Core 跨平台

    前言   .NET Core是一个开源的模块化的Framework,不管是开发web或移动设备都在同一个Framework(.NET Core)下运行,而且 .NET Core也可在不同的操作系统上运 ...

  6. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  7. ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明

    ASP.NET Core 程序启动过程如下 目录 Startup 类 Configure() 方法 中间件 使用中间件 Configure 方法 的参数 IApplicationBuilder Ext ...

  8. ASP.NET Core 源码学习之 Options[1]:Configure

    配置的本质就是字符串的键值对,但是对于面向对象语言来说,能使用强类型的配置是何等的爽哉! 目录 ASP.NET Core 配置系统 强类型的 Options Configure 方法 源码解析 ASP ...

  9. ASP.NET Core 2.1 源码学习之 Options[1]:Configure

    配置的本质就是字符串的键值对,但是对于面向对象语言来说,能使用强类型的配置是何等的爽哉! 目录 ASP.NET Core 配置系统 强类型的 Options Configure 方法 Configur ...

随机推荐

  1. 【LeetCode每天一题】Edit Distance(编辑距离)

    Given two words word1 and word2, find the minimum number of operations required to convert word1 to  ...

  2. linux文件与目录的创建

    在Linux初期的学习中,是我们对基础命令的掌握,首先我们学习文件与目录的创建,分别有一些命令与选项,我们依次来看: 1:在Linux系统中,一切服务皆以文件的形式表现,脚本文件,服务配置文件,记事本 ...

  3. vue知识总结

    vue: 渐进式JavaScript 框架 Vue项目构建 npm install -g vue vue init webpack-simple my-project cd my-project np ...

  4. 使用 dom4j 处理 xml (1)

    解决问题需要,自己简单学习了一下dom4j 的基本用法: (1)读取 xml 文件: (2)修改 xml 文件. 需要的 jar 包: dom4j-xxx.jar (可以在 https://dom4j ...

  5. IT题库6-同步和异步

    同步就是许多线程同时共用一个资源,一个线程在用别的线程就要等待.异步相反,可以不用等待. 同步:发送一个请求,等待返回,然后才能再发送下一个请求:异步:发送一个请求,不等待返回,随时可以再发送下一个请 ...

  6. Atom以及amWiki个人维基安装设置

    amWiki个人维基 amWiki支持.md文件的静态维基系统 安装 参考 安装Atom 下载amWiki解压zip到C:\Users\用户名\.atom\packages 目录下,或在Atom中搜索 ...

  7. 示例, linq分组

    public class HIS_CLIREGISTER : BaseModel{ private String _FBCODE;[StringLength(8)]/// <summary> ...

  8. python-支付宝支付示例

      项目演示: 1.输入金额 2.扫码支付: 3.支付完成: 4.跳转回商户 一.注册账号 https://openhome.alipay.com/platform/appDaily.htm?tab= ...

  9. 51nod 1009 数字1的数量(数位dp模板)

    给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1.   数位dp的模板题   ...

  10. asp.net core 使用 web deploy 部署网站

    1.添加角色和功能中 web服务器(iis)->管理工具->管理服务  打勾并安装 2.安装 web deploy,也可以通过 web平台安装程序 来安装,搜索web deploy就可以了 ...