using System;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
App app = new App();
app.Use(next => {
Console.WriteLine(1);
return act => {
Console.WriteLine("1-before");
//其它逻辑代码...
Console.WriteLine(act.Url);
next.Invoke(act);
//其它逻辑代码...
Console.WriteLine("1-after");
};
});
app.Use(next => {
Console.WriteLine(2);
return act => {
Console.WriteLine("2-before");
//其它逻辑代码...
next.Invoke(act);
//其它逻辑代码...
Console.WriteLine("2-after");
};
});
app.Use(next => {
Console.WriteLine(3);
return act => {
Console.WriteLine("3-before");
//其它逻辑代码...
next.Invoke(act);
//其它逻辑代码...
Console.WriteLine("3-after");
};
});
Action<HttpContext> act= app.Builder();
HttpContext httpContext = new HttpContext();
act.Invoke(httpContext);
Console.ReadLine();
}
}
public class App
{
List<Func<Action<HttpContext>, Action<HttpContext>>> list = new List<Func<Action<HttpContext>, Action<HttpContext>>>();
public void Use(Func<Action<HttpContext>, Action<HttpContext>> func)
{
list.Add(func);
}
public Action<HttpContext> Builder()
{
//当集合为空时执行,相当于.net core 下的404
Action<HttpContext> action = act => { Console.WriteLine("404"); };
list.Reverse();
foreach (Func<Action<HttpContext>, Action<HttpContext>> item in list)
{
action = item.Invoke(action);
}
return action;
}
}
public class HttpContext
{
public int Id { get; set; }
public string Url { get; set; } = "http://www.baidu.com";
public string Host { get; set; } = "www.baidu.com";
}
}