【橙子老哥】.NetCore 管道模型源码深度解读

hello,大家好,今天又是橙子老哥的分享时间,希望大家一起学习,一起进步。

欢迎加入.net意社区,第一时间了解我们的动态,地址:ccnetcore.com

最近遇到很多小伙伴们问我,自己会.netframework想学.netcore,到底难不难,思考一下,其实基本大同小异,区别比较大的,主要是.netcore的管道模型

所以这篇文章,我们针对管道模型来玩一下,来看看它到底是个啥?

1、理论

说到管道模型,那我就不得不搬出下面这种经典图了:
在这里插入图片描述
.netcore的管道模型,类似一个俄罗斯套娃,从请求进来到请求出去,依次按照我们添加管道模型的顺序去执行

它的本质是属于一种特殊的 责任链 设计模式,不熟悉的人可以多去了解一下这个设计模式,真的很实用,主要是用于处理大量的if else等流程类型的业务,平替面向过程的不二之选

对于http请求,用管道模型,可谓是再合适不过了。

同时,每一个管道,又可以叫做中间件,对请求做了一个aop的操作,不就是中间件做的事情吗?很多中间件的功能都可以直接做成一个nuget包,引入到程序内部的管道模型中。微软考虑了这一点,也是用心了。

至于管道模型如何使用,网上资料很多,这里就不赘述了,本文主要以底层原理如何实现为主。

2、源码实现

入口:
在创建一个.netcore的web api程序,我们可以在program中build之后添加自己的管道

var app = builder.Build();
app.Use((context,next) =>
{
   
    Console.WriteLine("执行管道1");
    return next();
});
app.Use((context,next) =>
{
   
    Console.WriteLine("执行管道2");
    return next();
});

我们往use里面看看,我们自定义的管道模型是如何跑到进去的

	WebApplication:
	
    public IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
    {
   
      this.ApplicationBuilder.Use(middleware);
      return (IApplicationBuilder) this;
    }

调用的WebApplication.use方法,走到this.ApplicationBuilder

如果熟悉.net5的伙伴们,肯定清楚WebApplication是后来新增的类,其实就是对ApplicationBuilder等元素包了一层,更方面我们使用,所以我们看看ApplicationBuilder内,use是做了什么

	ApplicationBuilder:

    public IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
    {
   
        _components.Add(middleware);
        _descriptions?.Add(CreateMiddlewareDescription(middleware)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值