Metalama簡介1. 不止是一個.NET跨平臺的編譯時AOP框架
Metalama概覽
前面一篇文章介紹到了Metalama
: https://www.cnblogs.com/chsword/p/dotnet_compile_aop_base_roslyn.html
Metalama
是一個基於微軟編譯器Roslyn
的超程式設計的庫,可以解決我在開發中遇到的重複程式碼的問題。但是其實Metalama
不止可以提供編譯時的程式碼轉換,更可以提供自定義程式碼分析
、與IDE結合的自定義程式碼修復與程式碼重構功能
等功能。
經過面對文件的學習,發現Metalama
可以做到很多非常神奇的事情。
例如:
可以為指定類在編譯時增加介面如INotifyPropertyChanged
。
可以生成編譯時的類似AutoMapper
可以自定義程式碼分析,增強團隊程式碼驗證。
Metalama兩個核心概念
1. AspectAspect
是AOP的基本概念,它是一個切面
,可以對方法、事件、屬性、欄位、引數以及型別進行操作,這些操作包括編譯時修改這些內容或增加程式碼分析、實時模板、程式碼重構提示等。
2. FabricFabric
可以對名稱空間、型別、專案進行修改,按規則新增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
即可檢視編譯後的程式碼。