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方法。
可以自定義代碼分析,增強團隊代碼驗證。

image

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並安裝即可。
image

插件提供了可以即時查看編譯后代碼的功能。
image
點擊Show Metalama Diff即可查看編譯后的代碼。
image

引用

Metalama官方文檔
Visual Studio 插件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM