Metalama库跨平台的编译实现AOP框架

更新时间:2022-04-12 14:17

Metalama是一个基于微软编译器Roslyn的元编程的库,可以解决我在开发中遇到的重复代码的问题。但是其实Metalama不止可以提供编译时的代码转换,更可以提供自定义代码分析、与IDE结合的自定义代码修复与代码重构功能等功能。

经过面对文档的学习,发现Metalama可以做到很多非常神奇的事情。

例如:

可以为指定类在编译时增加接口如INotifyPropertyChanged。

可以生成编译时的类似AutoMapper方法。

可以自定义代码分析,增强团队代码验证。

图片[1] - Metalama库跨平台的编译实现AOP框架 - 尘心网

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并安装即可。

图片[2] - Metalama库跨平台的编译实现AOP框架 - 尘心网
插件提供了可以即时查看编译后代码的功能。

图片[3] - Metalama库跨平台的编译实现AOP框架 - 尘心网
点击Show Metalama Diff即可查看编译后的代码。

图片[4] - Metalama库跨平台的编译实现AOP框架 - 尘心网

引用

Metalama官方文档

Visual Studio 插件

文档下载:Metalama库跨平台的编译实现AOP框架.doc文档

THE END
喜欢就支持一下吧