容器中每个元素对应每个中间件的行为委托Func<RequestDelegate, RequestDelegate>, 这个行为委托包含2个关键行为:输入下一个中间件的执行委托next:RequestDelegate, 完成当前中间件的Invoke函数: RequestDelegate;
通过build方法完成前后中间件的链式传值关系
分析源码:回答上面的问题:
使用反射构造中间件的时候,第一个参数Array[0] 是下一个中间件的执行委托
当前中间件执行委托 函数名称被限制为: Invoke/InvokeAsync, 函数支持传入除HttpContext之外的参数
按照代码顺序添加进入 _components容器, 通过后一个中间件的执行委托 -----(指向)----> 前一个中间件的输入执行委托建立链式关系。
附:非标准中间件的用法
短路中间件、 分叉中间件、条件中间件
整个处理管道的形成,存在一些管道分叉或者临时插入中间件的行为,一些重要方法可供使用
Use方法是一个注册中间件的简便写法
Run方法是一个约定,一些中间件使用Run方法来完成管道的结尾
Map扩展方法:请求满足指定路径,将会执行分叉管道,强调满足 path
MapWhen方法:HttpContext满足条件,将会执行分叉管道:
UseWhen方法:HttpContext满足条件 则插入中间件