zoukankan      html  css  js  c++  java
  • .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);//创建管道并运行
  • 相关阅读:
    vSphere笔记01~02
    【科普】人眼到底等于多少像素
    《标题党》自我修炼的10个秘籍
    说说云盘背后的黑科技!
    用shell批量编码转换
    Java课设--俄罗斯方块Tetris
    教程,Python图片转字符堆叠图
    谈谈索引的哲学思想
    MySQL索引实战经验总结
    博客要转型啦
  • 原文地址:https://www.cnblogs.com/zhchsh/p/9084769.html
Copyright © 2011-2022 走看看