• .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);//创建管道并运行
  • 相关阅读:
    关于中间件(Middleware)的理解
    强类型约束的中间件(IMiddleware)
    常规中间件(Conventional Middleware) 之 自定义中间件
    常规中间件(Conventional Middleware) 之 内联中间件(in-line middleware)
    git 遴选(cherry-pick)
    sql转linq
    python知识体系
    when 的使用
    关于联表查询时NULL值的处理
    $project 选择要显示的字段
  • 原文地址:https://www.cnblogs.com/zhchsh/p/9084769.html
Copyright © 2020-2023  润新知