日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net Aop(静态织入)框架 BSF.Aop

發(fā)布時間:2023/12/4 asp.net 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Aop(静态织入)框架 BSF.Aop 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BSF.Aop

.Net?免費開源,靜態(tài)Aop織入(直接修改IL中間語言)框架,類似PostSharp(收費);
實現(xiàn)前后Aop切面和INotifyPropertyChanged注入方式。

開源地址:?https://git.oschina.net/chejiangyi/BSF.Aop

開源QQ群: .net 開源基礎(chǔ)服務(wù)? 238543768? 歡迎交流

描述:

  • 靜態(tài)織入實現(xiàn),性能幾乎接近原生代碼編寫。

  • 項目結(jié)構(gòu)擴展自BSF基礎(chǔ)架構(gòu),但dll方面并不依賴BSF.dll,可以獨立開發(fā)使用。

  • 項目代碼量少(也就幾個類文件),核心功能插件化開發(fā),便于第三方擴展,閱讀,調(diào)試,一起來完善。

  • .net Aop靜態(tài)織入相關(guān)的免費開源項目比較少或暫未聽聞,故希望開源這塊內(nèi)容,成為同類型開源項目的起點和借鑒。

?

使用配置

1)項目引用BSF.Aop.dll,引用Mono.Cecil.dll,引用Mono.Cecil.Pdb.dll。
2)項目啟動代碼添加AopStartLoader.Start();一句代碼即可。
(該代碼用于自動注入掃描和vs項目環(huán)境自動配置,導出相關(guān)exe文件等)

備注:

  • Web項目在Application_Start中添加

  • Winform項目在Pragram.Main中添加

自動化配置(默認推薦)

Build項目,然后直接運行調(diào)試項目。

備注:

  • AopStartLoader.Start();這句代碼第一次項目運行會報錯,因為Aop環(huán)境未曾自動搭建;第一次運行并自動搭建成功后,以后運行都是自動注入的。

  • 默認會在項目下生成“packages.BSF.Aop”文件夾,并在vs項目PostBuildEvent事件中注入“aop運行腳本”,具體參考以下“手工配置內(nèi)容”。

手工配置 (遇到問題,推薦使用)

1)配置Aop注入目錄。
vs項目下新建packages.BSF.Aop 目錄,里面分別包含BSF.Aop.ILRun.exe,BSF.Aop.dll,Mono.Cecil.Pdb.dll,Mono.Cecil.dll 這幾個文件。
2)配置PostBuildEvent 腳本。

winform環(huán)境:

打開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環(huán)境:

打開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 車江毅

開源是一種態(tài)度,分享是一種精神,學習仍需堅持,進步仍需努力,.net生態(tài)圈因你


原文地址:http://www.cnblogs.com/chejiangyi/p/5819129.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的.Net Aop(静态织入)框架 BSF.Aop的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。