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. angular4脚手架搭建

    Angular4.X安装,创建 1.安装最新的nodejs(node -v ,npm -v) 2.新建文件夹(右键git bash here)npm install -g @angular/cli 3 ...

  2. MessengerJS

    跨文档通信解决方案 Since modern browsers have native cross-document communication method(the PostMeessage API ...

  3. Jvisualvm 添加插件

    1.访问地址:https://visualvm.github.io/pluginscenters.html,找到自己JDK版本对应的插件下载地址(我的JDK版本为1.7.0_67): 2.点击该链接进 ...

  4. sed memo 2

    配置文件注释过滤 示例文件 [user_00@txyun test]$ cat sed_test # comment aaaaaaaaaaa bbbb #comment cccc dddd fffo ...

  5. bootstrap表格添加按钮、模态框实现

    bootstrap表格添加按钮.模态框实现 原创 2017年07月20日 17:35:48 标签: bootstrap 1723 bootstrap表格添加按钮.模态框实现 - 需求: 需要表格后面每 ...

  6. .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?(转)

    .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?  后端开发  作者: Rector  1973 阅读  0 评论  0 收藏  收藏本文 ...

  7. 接口自动化测试持续集成--Soapui接口功能测试数据传递

    做接口测试经常会遇到如下两种情况需要处理数据传递 接口间的数据依赖,A接口请求的参数需要用到B接口的返回值 接口请求通常要用到鉴权的接口获取Token,Token通常会跟其他接口构成一对多的关系,这种 ...

  8. C# Unity依赖注入

    简介: 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个过程中你不是一个控制者而是一个请求者,依赖于容器提供给你的资源,控制权落到了容器 ...

  9. orcl数据库锁等级研究小记

    上周通过orcl 悲观锁的方式解决了一个并发临界值的问题.现在来研究下orcl各中锁的机制以及如何手动释放锁. 首先,通过查阅资料,先了解下数据的的各种操作语言分类. SQL语言共分为四大类:数据查询 ...

  10. 前端学习历程--vue

    ---恢复内容开始--- 一.对比其他框架 1.react: 共同点: 使用 Virtual DOM 提供了响应式(Reactive)和组件化(Composable)的视图组件. 将注意力集中保持在核 ...