.Net Aop(静态织入)框架 BSF.Aop
BSF.Aop
.Net 免费开源,静态Aop织入(直接修改IL中间语言)框架,类似PostSharp(收费);
实现前后Aop切面和INotifyPropertyChanged注入方式。
开源地址: https://git.oschina.net/chejiangyi/BSF.Aop
开源QQ群: .net 开源基础服务 238543768 欢迎交流
描述:
静态织入实现,性能几乎接近原生代码编写。
项目结构扩展自BSF基础架构,但dll方面并不依赖BSF.dll,可以独立开发使用。
项目代码量少(也就几个类文件),核心功能插件化开发,便于第三方扩展,阅读,调试,一起来完善。
.net Aop静态织入相关的免费开源项目比较少或暂未听闻,故希望开源这块内容,成为同类型开源项目的起点和借鉴。
使用配置
1)项目引用BSF.Aop.dll,引用Mono.Cecil.dll,引用Mono.Cecil.Pdb.dll。
2)项目启动代码添加AopStartLoader.Start();一句代码即可。
(该代码用于自动注入扫描和vs项目环境自动配置,导出相关exe文件等)
备注:
Web项目在Application_Start中添加
Winform项目在Pragram.Main中添加
自动化配置(默认推荐)
Build项目,然后直接运行调试项目。
备注:
AopStartLoader.Start();这句代码第一次项目运行会报错,因为Aop环境未曾自动搭建;第一次运行并自动搭建成功后,以后运行都是自动注入的。
默认会在项目下生成“packages.BSF.Aop”文件夹,并在vs项目PostBuildEvent事件中注入“aop运行脚本”,具体参考以下“手工配置内容”。
手工配置 (遇到问题,推荐使用)
1)配置Aop注入目录。
vs项目下新建packages.BSF.Aop 目录,里面分别包含BSF.Aop.ILRun.exe,BSF.Aop.dll,Mono.Cecil.Pdb.dll,Mono.Cecil.dll 这几个文件。
2)配置PostBuildEvent 脚本。
winform环境:
打开vs-》项目属性-》PostBuildEvent,配置aop运行脚本。如:
xcopy $(OutDir)BSF.Aop.dll $(ProjectDir)packages.BSF.Aop\ /Y
call "$(ProjectDir)packages.BSF.Aop\BSF.Aop.ILRun.exe" msgbox $(TargetDir)
web环境:
打开vs-》项目属性-》PostBuildEvent,配置aop运行脚本。(OpenApi.Test.Web替换成具体的项目名) 如:
xcopy $(SolutionDir)\OpenApi.Test.Web\bin\BSF.Aop.dll $(SolutionDir)\OpenApi.Test.Web\packages.BSF.Aop\ /Y
call "$(SolutionDir)\OpenApi.Test.Web\packages.BSF.Aop\BSF.Aop.ILRun.exe" msgbox $(SolutionDir)\OpenApi.Test.Web\bin\
使用demo示例
1) 前后Aop切面示例 (详细参考BSF.Aop.Test项目)
public class AroundAopTest { [AttributeInfo(Des = "测试2")] public void Method(TempInfo info, out int b,int a=1) { a = 222; b = 3; System.Console.WriteLine("Hello world!"+a); } } public static class AroundAopTest2 { [MyAroundAop][AttributeInfo(Des ="测试")] public static void Method2(TempInfo info, int a = 1) { a = 222; System.Console.WriteLine("Hello world!" + a); } public class MyAroundAop : Aop.Attributes.Around.AroundAopAttribute { public MyAroundAop() { } public override void Before(AroundInfo info) { var att = info.Method.CustomAttributes.ToList()[0]; info.Params["a"] = 55; System.Console.WriteLine("before" + info.Params["a"]); } public override void After(AroundInfo info) { System.Console.WriteLine("after"+ info.Params["a"]); } } public class TempInfo { public int T1 { get; set; } } public class AttributeInfo : System.Attribute { public string Des { get; set; } }
2) INotifyPropertyChanged 示例(暂未测试真正使用效果,详细参考BSF.Aop.Test项目 )
[NotifyPropertyChangedAop] public class User { public string Name { get; set; } public int Age { get; set; } [NoAop] public int B { get; set; } }
by 车江毅
开源是一种态度,分享是一种精神,学习仍需坚持,进步仍需努力,.net生态圈因你
原文地址:http://www.cnblogs.com/chejiangyi/p/5819129.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
.Net Aop(静态织入)框架 BSF.Aop相关推荐
- 从Spring源码探究AOP代码织入的过程
随着不断地使用Spring,以及后续的Boot.cloud,不断的体会到这个拯救Java的生态体系的强大,也使我对于这个框架有了极大的好奇心,以至于产生了我为什么不能写一个这样的框架的思考. 通过自学 ...
- Java手写Spring的AOP(切面织入)小Demo--盲僧代理击飞 亚索接大实例
在学习Spring的过程中总会很迷茫,打个@Aspect注解切面功能就有了,只要脱离了框架感觉自己还是什么都没会,所以自己猜了一下切面的思路,大概写了个小Demo,欢迎交流. 涉及知识:JDK动态代理 ...
- 动态IL织入框架Harmony简单入手
Harmony是一个开放源代码库,旨在在运行时替换.修饰或修改任何现有C#方法.它的主要用在用Mono语言编写的游戏和插件,但是该技术可以与任何.NET版本一起使用.它还照顾对同一方法的多次更改(它们 ...
- Spring 揭秘之Spring AOP一世(2)织入实现
文章目录 Spring AOP一世 Spring AOP的织入 与ProxyFactory打交道 基于接口的代理 基于类的代理 Introduction的织入 ProxyFactory的本质 容器中的 ...
- Java - 你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net a. 连接点(Joinpoint):程序执行的某个特 ...
- .NET静态代码织入——肉夹馍(Rougamo)
肉夹馍是什么 肉夹馍通过静态代码织入方式实现AOP的组件..NET常用的AOP有Castle DynamicProxy.AspectCore等,以上两种AOP组件都是通过运行时生成一个代理类执行AOP ...
- 什么是AOP? AOP .Net 框架,AOP 资源
如果说面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系的话:那么面向方面编程则是希望能够将通用需求功能从不相关的类当中分 ...
- 静态代理之AspectJ编译织入
前面两篇文章都是说的在代码运行时动态的生成class文件达到动态代理的目的,那我们现在回到静态代理,静态代理唯一的缺点就是我们需要对每一个方法编写我们的代理逻辑,造成了工作的繁琐和复杂.AspectJ ...
- AOP技术介绍--(AOP技术基础)
2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出 ...
最新文章
- 用于RGB-D显著目标检测的自监督表示学习
- 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...
- Hadoop完全分子式环境搭建—问题及解决办法
- svn add Default@2x.png的文件含有@的文件名注意事项
- java 素数乘积,求助2424379123 = 两个素数的乘积,求这两个素数?
- 从 Eclipse 到 IDEA,就像从金字塔到太空堡垒!
- “方法X对于类型Y是模糊的” Java模糊方法调用null错误
- 学习python的错误总结
- 莞工计算机学院杀手,莞工oj第40题神奇的fans
- 数学建模matlab视频教程,matlab编程教程_求matlab视频教程,主要用于数学建模方面的...
- java专题作业答案_java作业答案java作业答案.doc
- 2009年最极品的冷笑话汇集!(超经典)
- Mac上有哪些软件可以代替Office或Word的软件?
- unsigned char code 是什么
- 论文趋势分析——数据理解与分析
- 现代程序员 VS. 古典程序员,你属于哪一类?
- luaPanda 调试
- Java Swing 程序设计01
- 阿里云PolarDB-X荣获“2022 OSCAR 尖峰开源项目及开源社区”奖
- UOS认证,UOS桌面管理员考试题库,UOS系统管理员、UOS运维工程师 题库 答案
热门文章
- 在zabbix中添加监控主机及Items
- SELECT语句“加锁选项”功能说明
- 基于Prometheus的.NET 4.x应用服务监控
- 简单三分钟,本地搭建k8s
- 面向.NET开发人员的Dapr——目录
- fiddler插件开发
- 如何在 ASP.NET Core 中使用 LazyCache
- 如何在 ASP.Net Core 中使用 MediatR
- 【Blog.Core重要升级】:封装服务扩展层
- TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹...