原本的IAopActors如下

  1. public interface IAopActors
  2. {
  3. object Execute(AopContext context);
  4. Task<TResult> ExecuteAsync<TResult>(AopContext context);
  5. Task InvokeAsync(AopContext context);
  6. }

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

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

  1. public interface IAopActors
  2. {
  3. object Execute(Func<AopContext, object> invoke, AopContext context);
  4. Task<TResult> ExecuteAsync<TResult>(Func<AopContext, Task<TResult>> invoke, AopContext context);
  5. Task InvokeAsync(Func<AopContext, Task> invoke, AopContext context);
  6. }

对JitAopAttribute部分做了修改

  1. public class JitAopAttribute : Attribute
  2. {
  3. public virtual void Before(MethodReflector method, object instance, params object[] param)
  4. {
  5. Console.WriteLine($"Before Name:{method.Name}");
  6. }
  7.  
  8. public virtual void After(MethodReflector method, Exception exception, object instance, params object[] param)
  9. {
  10. Console.WriteLine($"After Name:{method.Name}");
  11. }
  12.  
  13. public virtual Task BeforeAsync(MethodReflector method, object instance, params object[] param)
  14. {
  15. Console.WriteLine($"BeforeAsync Name:{method.Name}");
  16. return Task.CompletedTask;
  17. }
  18.  
  19. public virtual Task AfterAsync(MethodReflector method, Exception exception, object instance, params object[] param)
  20. {
  21. Console.WriteLine($"AfterAsync Name:{method.Name}");
  22. return Task.CompletedTask;
  23. }
  24. }

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 国庆更新的更多相关文章

  1. NCoreCoder.Aop详解

    于今天,功能终于完善度到比较满意的程度了 准备好好写一篇文章,而不是之前的流水账,分享一下最近这些天的踩坑 一开始AOP选的微软提供的DispatchProxy 关于这个,有大佬的文章,可以看看,了解 ...

  2. smartjs 0.2发布 - 新增oop模块&AOP增强

    SmartJS2.0发布,更新内容如下: 新增oop(klass,factory)模块: promiseEvent加入非阻塞模式noBlock: trigger加入属性监听; smartjs主模块优化 ...

  3. 01_安装电脑软件的步骤批处理脚本.bat

    REM 01_安装电脑软件的步骤批处理脚本.bat MD 01_安装电脑软件的步骤 REM ZIP解压密码空格MD 02_制作杏雨梨云USB维护系统2019中秋版之国庆更新固态U盘MD 03_复制安装 ...

  4. 电脑软件安装过程文档.BA

    MD 01-打印并阅读-电脑软件安装过程文档.BAT-即此批处理脚本文档MD 02-阅读-电脑软件安装经验教训文档.DOCX-MD 03-制作-杏雨梨云USB维护系统2019中秋版之国庆更新-可启动U ...

  5. 'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写

    'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写 'Rem Everything是voidtools开发的一款本地NTFS文件和 ...

  6. SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis插件实现数据操作记录及更新对比

    引文 本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:AO ...

  7. SpringBoot AOP控制Redis自动缓存和更新

    导入redis的jar包 <!-- redis --> <dependency> <groupId>org.springframework.boot</gro ...

  8. 国庆前执行更新承诺SO交期 FP_SO2SAP

    每年9月20日到30号执行以下程序:创建日期为昨天的订单,且承诺交期为10月1到3号,则承诺交期需加7天:创建日期为昨天的订单, 承诺交期为4号到11月1日,承诺交期需加4天 存储过程:FP_SO2S ...

  9. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

随机推荐

  1. Lambda 表达式遍历集合时用remove方法删除list集合中满足条件的元素问题

    一:循环遍历list集合的四种方式 简单for循环 iterator循环 增加for循环 Lanbda表达式 二:四种遍历方式的用法示例 //简单for循环 List<SalaryAdjustm ...

  2. gitlab-ci部署实现持续集成(centos7)

    一.gitlab安装 1. 环境准备 // selinux和 firewall 关闭 $ setenforce 0 $ sed -i "/^SELINUX/s/enforcing/disab ...

  3. day55 js进阶

    目录 引子 一.BOM操作 1 window对象 2 window子对象 3 history对象 4 location对象(掌握) 5 弹出框 6 计时器相关 二.DOM操作 1 查找标签 1.1 直 ...

  4. 仿Neo4j里的知识图谱,利用d3+vue开发的一个网络拓扑图

    项目需要画一个类似知识图谱的节点关系图. 一开始用的是echart画的. 根据https://gallery.echartsjs.com/editor.html?c=xH1Rkt3hkb,成功画出简单 ...

  5. JVM 专题二十一:垃圾回收(五)垃圾回收器 (二)

    3. 回收器 3.1 Serial回收器:串行回收 3.1.1 概述 Serial收集器是最基本.历史最悠久的垃圾收集器了.JDK1.3之前回收新生代唯一的选择. Serial收集器作为Hotspot ...

  6. java 面向对象(二十):类的结构:代码块

    类的成员之四:代码块(初始化块)(重要性较属性.方法.构造器差一些)1.代码块的作用:用来初始化类.对象的信息2.分类:代码块要是使用修饰符,只能使用static分类:静态代码块 vs 非静态代码块3 ...

  7. 导出数据到Excel的时候报JAVA.LANG.NOSUCHMETHODERROR: ORG.APACHE.POI.SS.USERMODEL.CELLSTYLE.SETVERTICALALIGNMENT(LORG/APACHE/POI/SS/USERMODEL/VERTICALALIGNMENT;)V

    JAVA.LANG.NOSUCHMETHODERROR: ORG.APACHE.POI.SS.USERMODEL.CELLSTYLE.SETVERTICALALIGNMENT(LORG/APACHE/ ...

  8. python+requests实现接口自动化

    1. 前言 今年2月调去支持项目接口测试,测试过程中使用过postman.jmeter工具,基本能满足使用,但是部分情况下使用较为麻烦.比如:部分字段存在唯一性校验或字段间有业务性校验,每次请求均需手 ...

  9. 项目管理:如何显性管理并提升Story分解能力

    引言: 在“DevOps能力之屋(CapabilitiesHouse of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力.华为云DevClou ...

  10. Java冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序

    冒泡排序   冒泡排序是一种简单的排序算法.它重复地走访过要排序地数列,一次比较两个元素,如果它们地顺序错误就把它们交换过来.走访数列地工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...