Metalama簡介1. 不止是一個.NET跨平台的編譯時AOP框架
Metalama概覽
前面一篇文章介紹到了Metalama
: //www.cnblogs.com/chsword/p/dotnet_compile_aop_base_roslyn.html
Metalama
是一個基於微軟編譯器Roslyn
的元編程的庫,可以解決我在開發中遇到的重複程式碼的問題。但是其實Metalama
不止可以提供編譯時的程式碼轉換,更可以提供自定義程式碼分析
、與IDE結合的自定義程式碼修復與程式碼重構功能
等功能。
經過面對文檔的學習,發現Metalama
可以做到很多非常神奇的事情。
例如:
可以為指定類在編譯時增加介面如INotifyPropertyChanged
。
可以生成編譯時的類似AutoMapper
方法。
可以自定義程式碼分析,增強團隊程式碼驗證。
Metalama兩個核心概念
1. Aspect
Aspect
是AOP的基本概念,它是一個切面
,可以對方法、事件、屬性、欄位、參數以及類型進行操作,這些操作包括編譯時修改這些內容或增加程式碼分析、實時模板、程式碼重構提示等。
2. Fabric
Fabric
可以對命名空間、類型、項目進行修改,按規則添加Aspect
或自定義程式碼分析
。
Metalama的主要功能
1.編譯時程式碼轉換
如上圖中紅色示例,Metalama
可以將重複的程式碼(例如日誌、快取、INotifyPropertyChanged、多執行緒、重試機制、或其它有大量重複的程式碼,如屬性、方法的定義)封裝到為一個AOP Attribute類,從而在編譯時向您的程式碼添加這個AOP類中約定的程式碼,這個AOP 的Attribute
我們以下統一稱之為Aspect
。
這樣做的好處是一方面可以使程式碼保持乾淨和簡潔,便於閱讀和維護,另一方便免除了運行時AOP的性能消耗。
另外對於編譯程式碼的轉換,Metalama
也提供了IDE的插件支援,具體請見下文。
2.程式碼驗證
如上圖中淺藍色示例,Metalama
可以提供自定義的程式碼分析功能,這裡的程式碼分析更自由,如前面圖中示例,可以自己編寫驗證規則要求某類必須在某命名空間中調用。
當然,這種程式碼驗證非常靈活,它可以基於項目、命名空間、類型、屬性、方法、參數、返回值、欄位、事件等諸多資訊來進行自定義。
在團隊中可以使用這種自定義程式碼驗證來進行那些使用.NET自帶的分析器、FxCop、Resharper等工具無法提供的程式碼分析規則。
3.自定義設計時的程式碼修復、重構功能
如上圖深藍色示例所示,Metalama
可以讓用戶按某規則,為Visual Studio
提供CodeFix
或重構
的提示,這樣對於團隊中共享某種約定是很有用的。
IDE支援
Metalama
提供了Vistual Studio
插件,當然這個插件不是必須使用的,但是的確可以提高一定效率。
直接在VS中擴展
– 擴展管理
中查找Metalama
並安裝即可。
插件提供了可以即時查看編譯後程式碼的功能。
點擊Show Metalama Diff
即可查看編譯後的程式碼。