.Net進階(5)使用Fody實現 .NET的靜態編織

序言

 廣義的面向切面編程,有靜態編織和動態代理兩種形式,它們都可以在某個方法執行前後插入某種處理邏輯。不同的地方在於,前者發生在編譯時期間,後者發生在運行時期間。

對於 .NET 而言,最常見的靜態編織方案是 PostSharp 和 Mono.Cecil,兩者的區別是:一個付費、一個免費。

本文介紹的 Fody 是一個基於 Mono.Cecli 的擴展庫,通過 Fody 的各種插件,我們可以向已有代碼織入特定的功能,譬如 Rougamo.Fody 這個插件可以讓我們對方法進行攔截。

基於這個原理,我們實現了一個完全不同於動態代理的攔截器。動態編織的本質是修改 IL 代碼,對於這一點我們可以通過 ILdasm.exe 這個工具來驗證。

爲了進一步瞭解 Fody 是如何修改 IL 代碼的,我們參照 Fody 的規範實現了一個自定義的插件,在這個過程中,我們瞭解了幾個常見 IL 指令,以及如何通過 Emit 來生成 IL 指令。

此時,我們就接觸到比表達式樹更爲底層的東西,而操作 IL 指令更是讓我們體會到寫彙編語言的酸爽,同時讓我們對 .NET 的編譯原理有了更爲直觀的認識。

資料

https://zhuanlan.zhihu.com/p/557599565

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章