使用するNet CoreコンソールはASPをシミュレートする.Net Coreのパイプモデル

2781 ワード

私の前のいくつかの文章でaspに下がりました.Netcoreのパイプモデルは、aspをより明確に理解するために.Netcoreのパイプ、またネットで勉強しました.Net Coreコンソールアプリケーションは、イメージを深めるとともに、学習の参考になります.
まず、コンソールアプリケーションを新規作成します.注意は.Net Coreのコンソールアプリケーション.
次に、新しいContextクラスを作成し、ASPをシミュレートします.Netcoreのcontextクラスを作成し、ContextクラスにWriteメソッドを追加します.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks.Dataflow;

namespace MyPipleLine
{
   public  class Context
    {
        public  void Write(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}

次にRequestDelegateクラスを新規作成し、クラスにRequestdelegateの依頼を宣言します.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace MyPipleLine
{
    public delegate Task RequestDelegate(Context context);
  
}

このRequestDelegateはContextタイプの値を受信し、Taskタイプを返します.
そして、Pragrameに戻ります.csクラスでは、
各(ミドルウェア)が保存されているListを追加します.
  public static List> _list = new List>();

Useメソッドを追加します.
  public static void Use(Func middleWare)
        {
            _list.Add(middleWare);
        }

再ASP.NET Coreアプリケーションでは、よくStartupをします.csのConfigではappを用いる.Use()メソッドは,ここでのUse()がそのappを模倣する.Use()の方法.Use()の方法には、RequestDelegate転送であり、RequestDelegateの依頼である転送タイプを追加する方法があることが知られています.この依頼は、私たちがよく呼ばれるミドルウェアです.
そしてMainメソッドに戻ります.
  static void Main(string[] args)
        {
            Use(next =>                         // Use          RequestDelegate,      RequestDelegate lambda   ,
            {
                return context =>
                {
                    context.Write("1");         //       context     。
                    return next.Invoke(context);  //        
                };
            });
            Use(next =>
            {
                return context =>              //  
                {
                    context.Write("2");
                    return next.Invoke(context);
                };
            });
            _list.Reverse();                        // _list          ,        ,            ,          。
            RequestDelegate end = (context) =>      
            {
                context.Write("end");
                return Task.CompletedTask;
            };
            foreach (var middleware in _list)      
            {
                end = middleware.Invoke(end);     // _list       “  ” end   。
            }
            end.Invoke(new Context());           //  end  
            Console.ReadLine();
        }

実行結果を確認します.
これがASPです.Netcoreのパイプモデルの基本原理.