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 国庆更新的更多相关文章
- NCoreCoder.Aop详解
于今天,功能终于完善度到比较满意的程度了 准备好好写一篇文章,而不是之前的流水账,分享一下最近这些天的踩坑 一开始AOP选的微软提供的DispatchProxy 关于这个,有大佬的文章,可以看看,了解 ...
- smartjs 0.2发布 - 新增oop模块&AOP增强
SmartJS2.0发布,更新内容如下: 新增oop(klass,factory)模块: promiseEvent加入非阻塞模式noBlock: trigger加入属性监听; smartjs主模块优化 ...
- 01_安装电脑软件的步骤批处理脚本.bat
REM 01_安装电脑软件的步骤批处理脚本.bat MD 01_安装电脑软件的步骤 REM ZIP解压密码空格MD 02_制作杏雨梨云USB维护系统2019中秋版之国庆更新固态U盘MD 03_复制安装 ...
- 电脑软件安装过程文档.BA
MD 01-打印并阅读-电脑软件安装过程文档.BAT-即此批处理脚本文档MD 02-阅读-电脑软件安装经验教训文档.DOCX-MD 03-制作-杏雨梨云USB维护系统2019中秋版之国庆更新-可启动U ...
- 'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写
'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写 'Rem Everything是voidtools开发的一款本地NTFS文件和 ...
- SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis插件实现数据操作记录及更新对比
引文 本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:AO ...
- SpringBoot AOP控制Redis自动缓存和更新
导入redis的jar包 <!-- redis --> <dependency> <groupId>org.springframework.boot</gro ...
- 国庆前执行更新承诺SO交期 FP_SO2SAP
每年9月20日到30号执行以下程序:创建日期为昨天的订单,且承诺交期为10月1到3号,则承诺交期需加7天:创建日期为昨天的订单, 承诺交期为4号到11月1日,承诺交期需加4天 存储过程:FP_SO2S ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
随机推荐
- [TZOJ] 平台训练-V1
日常训练 训练网址:http://www.tzcoder.cn/ 1001: 整数求和 描述求两个整数之和.输入输入数据只包括两个整数A和B.输出两个整数的和.样例输入1 2样例输出3题目来源TZOJ ...
- C#数据类型及其转换详解
前言 在 C# 中,数据类型可以分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 其中指针类型只在不安全代码下使 ...
- shell专题(四):Shell中的变量
4.1 系统变量 1. 常用系统变量 $HOME.$PWD.$SHELL.$USER等 2.案例实操 (1)查看系统变量的值 [atguigu@hadoop101 datas]$ echo $HOME ...
- Ant-Design-Vue中关于Table组件的使用
1. 如何自定义表格列头: <a-table :columns="columns" :dataSource="dataSource"> <sp ...
- C++ RMQ问题
RMQ问题是区间求最值问题,就是求一个数组第i个到第j个中最大数或最小数的算法. 这个算法有一些倍增思想,也有一些二分思想.具体是一个数组,m[i][j]表示从i开始往后数2的j次方个数的最大值或最小 ...
- Go的100天之旅-07条件和循环
目录 条件语句 if条件语句 switch条件语句 循环语句 for循环 goto语句 条件语句 Go的条件语句和其它语言类似,主要是不支持三目运算符所以?:这种条件判断是不支持的.Go提供的条件判断 ...
- bootstrap样式:.clearfix
我们知道,在静态页面的编写中,清除浮动是一件很繁琐的事情. 所以一般的CSS框架都会有用来清除浮动的样式. 在bootstrap中,这个样式叫 clearfix. 只要在需要清除浮动的元素的父元素加上 ...
- C++语法小记---友元
友元函数 延续C语言的结构体编程方式,直接访问类的私有成员,提高效率 友元分为函数友元和类友元 友元函数可以访问类的所有成员 友元类的所有成员函数都是友元函数 友元不具备传递性 友元函数和类的成员函数 ...
- Java 中的链式编程
前言 在写项目的时候,有一个实体类有好多个属性,new 出来之后需要不停的使用setXXX( )方法,效率低而且代码可读性差,查询了下发现可以实现实体类的链式编程. public class Us ...
- SpringBoot多数据库连接(mysql+oracle)
出于业务需求,有时我们需要在spring boot web应用程序中配置多个数据源并连接到多个数据库. 使用过Spring Boot框架的小伙伴们,想必都发现了Spring Boot对JPA提供了非常 ...