.Net Core 管道机制

开篇先上一张中间件原理图,帮助大家对管道机制形成一个直观的认识

 

下面我们实现一个简单的管道机制,以此为例深入理解管道机制的原理

1. 首先定义一个委托,该委托接收一个上下文对象,返回值为Task,代码实现如下

public delegate Task RequestDelegate(HttpContext context);

2. 实现创建管道的类

首先解释一个名词——中间件(Middleware),中间件是被组装成一个应用程序管道来处理请求和响应的软件组件,

该例子中中间件的实现是一个Func<RequestDelegate, RequestDelegate>的委托

管道类的实现代码如下

public class ApplicationBuilder : IApplicationBuilder
{
    private IList<Func<RequestDelegate, RequestDelegate>> middlewares = new List<Func<RequestDelegate, RequestDelegate>>();  
    public RequestDelegate Build()
    {
        RequestDelegate seed = context => Task.Run(() => {});
        return middlewares.Reverse().Aggregate(seed, (next, current) => current(next));//管道机制的重难点
    }     
    public IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
    {
        middlewares.Add(middleware);
        return this;
    }
}

3. 创建管道

首先创建一个中间件,中间件的实现代码如下

Func<RequestDelegate, RequestDelegate> middleware = next =>
{
    return context =>
    {
        //logic

        return next(context);//next
    };
};

实例化管道类,并添加一个或多个中间件,创建管道并执行

IApplicationBuilder app = new ApplicationBuilder();
app.Use(middleware);//添加中间件
app.Build()(context);//创建管道并运行

 

posted @ 2018-05-24 19:40  zhchsh  阅读(473)  评论(0编辑  收藏  举报