####參考文獻 https://github.com/liyonghelpme/MethodDecoratorpython
####定義 AOP,面向領域編程,是在不修改源代碼的狀況下,經過編譯時或者運行時的代碼修改來實現改變程序功能的目的。git
####問題和實現 例如如何在c#中實現相似於python的方法裝飾器的功能呢?github
fody這個庫,經過修改編譯好的dll的IL代碼來實現改變代碼功能的目的。編程
####操做步驟 csproj c#工程經過設置Targets能夠給編譯增長額外的步驟c#
fody採用的是插件化的設計方法,經過工程的fodyweaver.xml 配置文件配置須要的代碼功能修改器函數
####實例原理 MethodDecorator 方法修飾器這個插件的原理是:插件
首先加載dll,而且經過Mono.cecil 解析dll結構,尋找到Assembly中的module,接着尋找到這個module屬性所修飾的全部方法, 接着修改這些方法的il代碼。設計
修改後的IL代碼就是:xml
首先建立屬性修飾器的實例ci
接着執行實例的enter方法
接着執行原函數代碼
接着執行實例的EXIT方法
這樣就實現了方法修飾器的功能。