NCoreCoder.Aop 国庆更新

Posted ncorecoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NCoreCoder.Aop 国庆更新相关的知识,希望对你有一定的参考价值。

原本的IAopActors如下

    public interface IAopActors
    {
        object Execute(AopContext context);
        Task<TResult> ExecuteAsync<TResult>(AopContext context);
        Task InvokeAsync(AopContext context);
    }

非代理部分是用的AspectCore.Extensions.Reflection优化的反射

个人感觉代码不够优雅,遂改为

    public interface IAopActors
    {
        object Execute(Func<AopContext, object> invoke, AopContext context);
        Task<TResult> ExecuteAsync<TResult>(Func<AopContext, Task<TResult>> invoke, AopContext context);
        Task InvokeAsync(Func<AopContext, Task> invoke, AopContext context);
    }

 

对JitAopAttribute部分做了修改

    public class JitAopAttribute : Attribute
    {
        public virtual void Before(MethodReflector method, object instance, params object[] param)
        {
            Console.WriteLine($"Before Name:{method.Name}");
        }

        public virtual void After(MethodReflector method, Exception exception, object instance, params object[] param)
        {
            Console.WriteLine($"After Name:{method.Name}");
        }

        public virtual Task BeforeAsync(MethodReflector method, object instance, params object[] param)
        {
            Console.WriteLine($"BeforeAsync Name:{method.Name}");
            return Task.CompletedTask;
        }

        public virtual Task AfterAsync(MethodReflector method, Exception exception, object instance, params object[] param)
        {
            Console.WriteLine($"AfterAsync Name:{method.Name}");
            return Task.CompletedTask;
        }
    }

After部分增加了异常捕获


委托部分用的Expression Tree而不是Emit,虽然底层都是一样的,但是Expression Tree的写法确实是要优雅很多的


注,这个项目持续跟进是为了个人学习和使用,功能和设计上,很多借鉴了AspectCore的思路,如果是个人学习,还是很有借鉴意义,如果处于公司的项目,需要完善度很高的Aop,还是推荐AspectCore 毕竟是完备程度最高的AOP

 

附上项目地址:https://github.com/htrlq/NCoreCoder.Framework

我偶像Lemon的AspectCore地址:https://github.com/dotnetcore/AspectCore-Framework


打个广告 如果对于这个项目有什么要交流的,欢迎加Q群 386092459

 

以上是关于NCoreCoder.Aop 国庆更新的主要内容,如果未能解决你的问题,请参考以下文章

国庆假期之CMDB管理系统

js常用代码片段(更新中)

doraemon的python form组件(国庆大更新)

css常用代码片段 (更新中)

doraemon的python csrf校验(国庆大更新)

国庆假第一天,补充服务器资产管理server端网卡Memory插件代码