zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    activityalias 的使用
    关于淘宝直通车的那些事(二):关键词选词方法
    Laucher 九宫格风格 长按移动删除 宫格
    NSAutoReleasePool的理解
    类似人人网的侧滑动层叠窗口实现及代码
    从应用中启动另外的应用
    android应用 获取本地指定类型文件 的两种最优方法
    获取手机中安装的所有应用程序
    Spring事务配置的五种方式【转】
    [转]理解inode
  • 原文地址:https://www.cnblogs.com/NCoreCoder/p/11634642.html
Copyright © 2011-2022 走看看