using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestPipeline
{
public class Testcs
{
public delegate void LineDelegate(int id);
private static readonly IList<Func<LineDelegate, LineDelegate>> _items = new List<Func<LineDelegate, LineDelegate>>();
/// <summary>
///
/// </summary>
/// <param name="line">第一個 LineDelegate 是下一個,返回的當前生成的LineDelegate</param>
public void Append(Func<LineDelegate, LineDelegate> line)
{
_items.Add(line);
}
public LineDelegate Build()
{
LineDelegate ending = (id) =>
{
Console.WriteLine("默認的接收編號是:" + id);
};
foreach (var item in _items.Reverse())
{
ending = item(ending);
}
return ending;
}
public void Run()
{
Append((next) =>
{
return id =>
{
Console.WriteLine("權限校驗 開始");
next(2);
Console.WriteLine("權限校驗 結束");
Console.WriteLine("【權限校驗】接收的編號是:" + id);
};
});
Append((next) =>
{
return id =>
{
Console.WriteLine("頁面校驗 開始");
next(3);
Console.WriteLine("頁面校驗 結束");
Console.WriteLine("【頁面校驗】接收的編號是:" + id);
};
});
Build()(1);
}
/// <summary>
/// 最原始的方式 實現Run 和 Build
/// </summary>
public void Run2()
{
Func<LineDelegate, LineDelegate> lineFuc1 = (next) =>
{
return id =>
{
Console.WriteLine("權限校驗 開始");
next(2);
Console.WriteLine("權限校驗 結束");
Console.WriteLine("【權限校驗】接收的編號是:" + id);
};
};
Func<LineDelegate, LineDelegate> lineFuc2 = (next) =>
{
return id =>
{
Console.WriteLine("頁面校驗 開始");
next(3);
Console.WriteLine("頁面校驗 結束");
Console.WriteLine("【頁面校驗】接收的編號是:" + id);
};
};
LineDelegate ending = (id) =>
{
Console.WriteLine("默認的接收編號是:" + id);
};
//傳入 最后一個,返回第二個中間件委托
var mid = lineFuc2(ending);
//傳入 第二個 返回第一步
var start = lineFuc1(mid);
start(1);
}
}
}