3

Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架 - 重典

 2 years ago
source link: https://www.cnblogs.com/chsword/p/metalama_1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 插件


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK