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);//创建管道并运行
  • 相关阅读:
    Linux——强制退出命令
    2019-08-07-安装jdk1.8配置环境变量
    2019-08-07-查看当前的系统版本-中文乱码显示
    2019-08-07-centos系统上文件出现乱码
    2019-08-06-centos6.4关闭防火墙-设置通过防火墙的端口
    2019-08-06-写批处理
    2019-08-06-centos 打包
    2019-07-26_解密黑客攻击前的准备
    2019-07-24-DOS 常用命令大全
    2019-07-24-windows一些常用命令-netsh
  • 原文地址:https://www.cnblogs.com/zhchsh/p/9084769.html
Copyright © 2011-2022 走看看