假如你是一个架构的搭建者,该如何设计web框架
背景:一个httpcontext,里面有request信息
asp.net管道事件
因为有多个固定步骤,每个步骤前后都可能要扩展动作,把动作前后分辨添加事件,支持动作注册
注册动作后,请求进来时,就会按照顺序执行事件(注册的动作就执行了)
以此完成扩展性设计
管道模型的本质
httprequest==》httpresponse
httpcontext==》action
管道的本质就是一个方法,接收httpcontext,然后去执行一些动作
requestdelegate
接收一个httpcontext
1、confige
1)是一张白纸,没有内置任何东西,要什么写什么 pay-for-what-you-use
2)扩展比较容易
##############################################################
why IOC
1、可以去掉对细节的依赖,方便扩展
减少影响范围,甚至转移到配置文件依赖,只需要改配置文件
2、可以做到屏蔽细节,对象依赖注入(DI)
DI依赖注入:是实现IOC的手段
构造对象时,能自动把一拉的对象生成并传入 支持递归无限级
这种技术手段就叫做依赖注入
更好的解耦
表示层
IBLL
业务逻辑层 依赖注入 IOC DI
IDAL
数据访问层
调用
数据源 实体类 辅助类
##############################################################
ServiceCollection 内置在asp.netcore的全新的容器
容器除了能生成对象,还能做很多其他事情
AddTransient 瞬时生命周期 即时构造
AddSingleton 单例 全程唯一
AddScoped 作用域单例 容器实例单例
没有线程单例
1、单例很好?
不建议太多的单例
配置文件
链接池
2、瞬时容器
3、请求单例--一次http请求就是一个实例
这说明一次请求会创建一个容器
比如事务 主要是适用于一次请求只需要一个对象,不同请求需要不同的对象
AOP面向切面编程
在不破坏封装的前提下,去额外的扩展功能
1、聚焦业务逻辑,轻松扩展功能
2、代码复用,集中管理
面向切面编程-Filter
1、Autorization Filter
2、Resource Filter
3、Action Filter
4、Exception Filter
5、Result Filter
程序运行
dotnet 项目.dll --urls="http://*:5000" --ip="127.0.0.1" --port=5000