阅读源码方法和目标
1 自上而下,先整体再细节
2 望文生义,该猜猜该过过
3 理解设计模式,抓住核心套路
目标:理解流程—扩展定制—掌握心法
ASP.NET Core粗略全貌
1 Program
2 Startup
3 M-V-C
4 appsettings
看源码之前,起码知道是干啥的
启动流程
1 准备HostBuilder
2 Build()
3 HostRun
Logger
组件-常规扩展
Option
基本操作
解决依赖注入时,需要传递指定数据问题,不是自行获取,而是能上端集中配置
Option
多种注册方式 1 Configure
2 ConfigureAll
3 PostConfigure
4 PostConfigureAll
5 AddOptions
Option
三种获取方式
1 IOptions<EmailOption>
简单粗暴不更新,就IOptions
2 IOptionsMonitor<EmailOption>
需要更新IOptionsMonitor
3 IOptionsSnapshot<EmailOption> IOptionsSnapshot
(除非单次请求内要求保证不变)
ASP.NET Core管道模型
连接点? 管道模型!何谓管道模型?就是个委托!
管道模型—承上启下—连接kestrel
与MVC—Kestrel
监听请求,解析得到HttpContext
—MVC就是处理HttpContext(Request&Response)
连接点(管道)其实是个委托—RequestDelegate
—接受HttpContext
参数,处理后得到结果,都在HttpContext
里面折腾。
俄罗斯套娃:多层委托嵌套----达到俄罗斯套娃效果—方便扩展管道就是委托!动态组装—随意指定环节轻松扩展—这就是委托嵌套
全家桶 VS 自选
Http
请求的处理是蛮复杂—不光是生成个HTML—处理Cookie
-Session
—Token
—缓存—重要的是业务步骤—一起很多个步骤—部分是通用的
ASP.NET和MVC管道—搭建框架—完成通用部分且提供扩展–基于事件event扩展—配置齐全直接用—但是会付出额外成本
ASP.NET Core管道—自选式—只有基本骨架,需要自行配置—要什么组装什么—Pay for what you use
Middleware
各种扩展源码篇
1 Use
2 Run
3 UseWhen
4 Map
5 MapWhen
这些都是对基础Use
方法的封装,终结就是不调用Next
,后3个都是开了独立的Branch
,然后执行
(重点)标准中间件封装 AddMiddleware
+ UseMiddleware
+ Options
1 基本结构认知
2 Add
集中注册–IOC
3 Use
扩展类–Invoke
4 Options
传值
写一个浏览器校验—如果是Chrome就正常响应,否则返回
Stream
读取问题
中间件去扩展MVC,其实不能随便写Response
—因为请求响应已完成,里面的Content-Length
已固定,所以不能改—那怎么改?—OnStarting
可以修改Header
—但是我想读写Request
和Response
1 请求体读取问题
2 响应体读取问题
常见中间件解读
1 全局异常处理中间件和扩展
2 Https
两个中间件解读
3 静态文件中间件和扩展
4 Session
中间件
中间件放置顺序问题-》是建立在理解源码的基础上
待续…