.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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#7.0中有哪些新特性?

以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来。现在是时候来展示这些特性,你也告诉借此告诉我们你的想法! C#7.0 增加了许多新功能,并…

java8的函数指针

转载自 java8的函数指针这段时间 项目实在是太紧了,没有时间写博客啊。java模式的文章还没有写完,后期在写吧。 最近项目中大量的使用到了远程调用以及回调。是采用反射的方式实现的。担心到大量的反射会影响到程序运行的效率问题。 所以决定放弃使用反…

新闻发布项目——接口类(newsTbDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.newsTb;/*** 新闻的接口类* author Administrator**/ public interface newsTbDao {//查询public List<newsTb>getnewsTbAll();//添加public int addNewsTb(newsTb news);//修改public i…

nbiot开发需要掌握什么_学习软件开发需要准备什么?

2020年&#xff0c;随着Internet的不断发展&#xff0c;现在Internet已经融入到每个人的生活中&#xff0c;所以在计算机行业的发展中&#xff0c;软件开发技术就显得非常重要&#xff0c;因为它是与我们的生活息息相关的&#xff0c;选择许多人想学习Java软件开发技术&#xf…

面试项目 java-服务端 18h58

以淘宝为例子介绍一下 这个架构非常之复杂&#xff0c;创业公司无法达到这样的架构&#xff0c;在当前阶段找到适合的架构 用户名唯一 横向越权 纵向越权 ftp服务器 mybatis mybatis反向工程 mybatis pageHelper 所有的东西在一个服务器上面 三台服务器单独做一个东…

Google高性能RPC框架gRPC 1.0.0发布

鉴于gRPC已进入稳定版分支&#xff0c;并对应用于生产中准备就绪&#xff0c;Google发布了gRPC 1.0。 gRPC源于被称为Stubby的Google内部项目&#xff0c;早期是用于一些Google内部服务间的通信。18个月前Google开源了gRPC框架&#xff0c;希望借此gRPC能被更广泛地采纳&#x…

java打开文件(Windows exe,应用文件exe,以及其他任何格式的文件)

转载自 java打开文件&#xff08;Windows exe,应用文件exe,以及其他任何格式的文件&#xff09; 使用java代码打开任何格式的文件 public static void main(String[] args) throws IOException { openWindowsExe(); openExe(); openFile(); } //用 Java 调用win…

新闻发布项目——接口类(commentDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.comment;/*** 新闻评论的接口* author Administrator**/ public interface commentDao {//查询public List<comment>getCommentAll();//根据id查询新闻信息public List<comment> g…

delphi7存取配置文件与sqlserver数据库连接_SQL Server基础知识概念要点详细讲解

SQL Server基础知识概念要点详细讲解目录基础概念1、网状模型数据库2、层次模型数据库3、关系模型数据库知识点实例总结基础概念SQL语言中&#xff0c;between and表示包括两边参数。%取余&#xff0c;/取商模式&#xff1a;在数据库三级模式结构中&#xff0c;对数据库中全部的…

.Net Core 中的包、元包与框架(Packages, Metapackages and Frameworks)

包&#xff0c;元包与框架 本文翻译自 Packages, Metapackages and Frameworks。 .Net Core 是一种由 NuGet 包组成的平台。一些产品体验受益于代码包的细粒度定义&#xff0c;而另一些受益于粗粒度的定义&#xff0c;这两种定义都是有用的&#xff0c;不能绝对地说哪个好与不好…

面试项目 java-服务端2 18h58

idea2017对mybatis plugin支持不是很好 标准的meaven项目用谁都一样 archetype是官网提供的模板项目 .gitignore文件非常的重要配置 Meven的pom文件 项目的包结构 Mybatis三剑客

Java剪切板操作大全

转载自 Java剪切板操作大全1. 概述提起剪切板&#xff0c;一般都是在桌面系统或工具中使用。目前&#xff0c;操作Java剪切板有两种形式&#xff0c;这也对应着两种不同的技术Swing和JavaFX。而剪切板有可以分为系统剪切板和自定义剪切板。顾名思义&#xff0c;系统剪切板可以…

君威u0073故障码解决_顽疾修复过程,君威没倒挡的变速箱故障就是这样修好

君威没倒挡的变速箱故障表现&#xff1a;开了18万公里的君威有没有倒挡的故障发生。每当这时&#xff0c;要重新启动能恢复。但是&#xff0c;出现的没倒挡的次数逐渐增多。没检查出故障码。顽疾修复过程&#xff0c;君威没倒挡的变速箱故障就是这样修好&#xff1a;检查君威变…

idea创建标准的meaven项目

若没有jdk 则这样配置 就是下拉框默认没有jdk1.7 初始化完成了

新闻发布项目——接口类(categoryTBDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.categoryTB;/*** 新闻类别的接口* author Administrator**/ public interface categoryTBDao {//查询所有的类别public List<categoryTB> getCategoryTBAll();//添加新闻类别public int …

controller属于哪一层_别急着换5G,4G手机同样值得考虑!哪几款安卓手机称得上4G机皇?...

今年已经进入了5G手机大战&#xff0c;目前有不少厂商都推出了自家的5G旗舰。虽说5G是以后的主流&#xff0c;但目前入手5G手机还为时尚早&#xff0c;毕竟距离5G全面普及还有至少2年时间&#xff0c;5G的套餐费用也高出许多。当前一些4G旗舰机型价格下降幅度不小&#xff0c;马…

基于.NET SingalR,LayIM2.0实现的web聊天室

LayIM官网 http://www.layui.com/doc/layim.html 博客教程&#xff1a;http://www.cnblogs.com/panzi/p/5767095.html 项目说明&#xff1a;基于.NET SingalR,LayIM2.0实现的web聊天室&#xff0c;功能如下&#xff1a; 注册登录 好友聊天&#xff0c;发送图片、文件 群组聊天&…

java验证身份证号码是否有效源代码

转载自 java验证身份证号码是否有效源代码1、描述 用java语言判断身份证号码是否有效&#xff0c;地区码、出身年月、校验码等验证算法2、源代码package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import …

idea初始化git 初始化git仓库

git status 查看变化 主干发布 分支开发 git 初始化 和git的分支完成了

互换性与技术测量教材pdf_【检验】临床生物化学检验技术(第6版)人民卫生出版社【电子教材PDF】【人卫教材电子版】...

内容简介为了顺应医学教育综合改革的发展趋势&#xff0c;推动我国医学检验技术专业的发展和学科建设&#xff0c;针对四年制医学检验技术专业人才的培养目标和培养模式&#xff0c;贯彻四年制教育思想&#xff0c;体现适合四年制教学需求的课程体系建设&#xff0c;教育部高等…