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的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
随机推荐
- Mysql 常用语句实战(2)
前置 sql 语句 用来创建表.插入数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- ...
- 记Centos7和RHEL连接不上网络
一 .前言 我是把Linux系统安装在虚拟机中的,用的是VMware. 在终端工具和操作界面中. VMware里面采用的网络适配器是NAT技术. 标题中的Centos和RHEL区别就不多说了,自行百度 ...
- VirtualBox安装centos8
原文链接:https://www.wjcms.net/archives/vagrantbox安装centos8 VirtualBox安装centos8 在线安装(不推荐) 打开git软件,直接运行命令 ...
- MCU 51-2 LED and Digital tube Test
点亮LED实验: #include <reg52.h> sbit LED1 = P1^; sbit LED2 = P1^; sbit LED8 = P1^; void main() { L ...
- java 面向对象(二十四):interface:接口
interface:接口1.使用说明: 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能 ...
- [Android] keytools生成jsk文件以及获取sha1码
生成jks文件 进入要生的jks文件的路径,打开windows的命令提示符(CMD) keytool -genkey -alias dct -keyalg RSA -keysize 1024 -key ...
- OSCP Learning Notes - File Transfers(1)
File transfer type: 1. HTTP Transfer files through the website. 2.wget wget http://10.0.0.109/exploi ...
- JQuery对下拉列表Select的一些操作
1.假如select中存在选项,需要清空的情况: $("#search").find("option").remove(); $("#search&q ...
- 题解 洛谷 P4602 【[CTSC2018]混合果汁】
注意到问题具有单调性,所以一个询问可以通过二分答案来解决. 对于多组询问,就采用整体二分来处理. 将果汁按\(d\)从大到小排序,二分出一个位置\(mid\),只考虑在位置\(mid\)之前的果汁,其 ...
- MVC + EFCore 项目实战 - 数仓管理系统7 - 数据源管理中--新增数据源
上篇我们完成了数据源列表展示功能(还未测试). 本篇我们来新增数据源,并查看列表展示功能. 接上篇: 二.数据源管理功能开发 2.新增数据源 我们用模态对话框来完成数据源的新增,效果如下图: 我们 ...