构建RequestDelegate管道

时间:2024-01-11 11:16:56

1. 创建 Context.cs

using System;
using System.Threading.Tasks; namespace MyPipeline
{
public class Context{ }
}

2. 创建 RequestDelegate.cs

using System;
using System.Threading.Tasks; namespace MyPipeline
{
public delegate Task RequestDelegate(Context context);
}

3. 具体实现

using System;
using System.Collections.Generic;
using System.Threading.Tasks; namespace MyPipeline {
class Program { public static List < Func < RequestDelegate, RequestDelegate >> _list = new List < Func < RequestDelegate, RequestDelegate >> ();
static void Main(string[] args) { Use(next => {
return context => {
System.Console.WriteLine("");
return next.Invoke(context);
};
}); Use(next => {
return context => {
System.Console.WriteLine("");
return next.Invoke(context);
};
}); RequestDelegate end = (context) => {
System.Console.WriteLine("end ... ");
return Task.CompletedTask; }; _list.Reverse();
foreach (var middleware in _list) {
end = middleware.Invoke(end); } end.Invoke(new Context()); Console.ReadLine(); } public static void Use(Func < RequestDelegate, RequestDelegate > middleware) {
_list.Add(middleware);
}
}
}

4. 运行结果


end ...