基于DispatchProxy打造自定义AOP组件

DispatchProxy是微软爸爸编写的一个代理类,基于这个,我扩展了一个AOP组件

暂时不支持依赖注入构造方法,感觉属性注入略显麻烦,暂时没打算支持

基于特性的注入流程

    [AttributeUsage(AttributeTargets.Method)]
    internal class TestAttribute:AopAttribute
    {
        protected override Task BeforeAsync(MethodInfo targetMethod, object[] args)
        {
            Console.WriteLine($"BeforeAsync {targetMethod.Name}");
            return base.BeforeAsync(targetMethod, args);
        }

        protected override Task AfterAsync(MethodInfo targetMethod, object[] args)
        {
            Console.WriteLine($"AfterAsync {targetMethod.Name}");

            return base.AfterAsync(targetMethod, args);
        }
    }

编写接口

    public interface ITest
    {
        [Test]
        void TestVoid();
        [Test]
        int TestInt();
        [Test]
        Task TestAsync();
        [Test]
        Task<int> TestIntAsync();
    }

 

整体结构是依赖注入,再实现一个实现类就好

特性打在接口的方法上

刚开坑,暂时只支持特性对应方法

调用

services.AddNCoreCoderAop<ITest, Test>(ServiceLifetime.Transient);

方法支持同步和异步两种

支持Singleton、Scoped、Transient三种生命周期,默认生命周期是Singleton

项目地址:

https://github.com/htrlq/NCoreCoder.Framework

posted @ 2019-09-09 16:59  沉迷代码的萌新  阅读(557)  评论(0编辑  收藏  举报