hangfire filter实现

internal class Program
{
    static async Task Main(string[] args)
    {
        var filters = new List<IFilter>
        {
            new FilterA(),
            new FilterB(),
        };

        Func<BackgroundJob> continuation = () =>
        {
            return new BackgroundJob();
        };

        filters.Reverse();
        var thunk = filters.Aggregate(continuation, 
            (next, filter) => () => InvokeClientFilter(filter, next));

        thunk();
    }

    private static BackgroundJob InvokeClientFilter(IFilter filter, Func<BackgroundJob> next)
    {
        filter.OnCreating();
        var backgroungJob = next();
        filter.OnCreated();
        return backgroungJob;
    }
}

public class FilterA : IFilter
{
    public void OnCreated()
    {
        Console.WriteLine("FilterA: OnCreated");
    }

    public void OnCreating()
    {
        Console.WriteLine("FilterA: OnCreating");
    }
}

public interface IFilter
{
    void OnCreating();
    void OnCreated();
}

public class FilterB : IFilter
{
    public void OnCreated()
    {
        Console.WriteLine("FilterB: OnCreated");
    }

    public void OnCreating()
    {
        Console.WriteLine("FilterB: OnCreating");
    }
}

public class BackgroundJob
{

}
posted @   pojianbing  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示