有没有想过这样一个场景,每当我早上离开家里的时候扫地机器人自动工作、窗帘自动拉开、所有灯光自动关闭,不需要每天不厌其烦地重复做这些动作?
Fody为此而生。Fody在编译器把你的代码编译为IL语言之前编辑IL代码插入这些自动化操作。
下面是Fody的官方介绍:
Fody 是用于编织 .net 程序集的可扩展工具。它允许在生成过程中操作程序集的 IL,通常这需要大量的管道代码。此管道代码涉及 MSBuild 和 Visual Studio API 的知识。Fody 尝试通过可扩展的外接程序模型消除该管道代码。
Fody 让世界变得更加简单。
Fody实现为一个Nuget包,它允许你用特性注解你的代码,然后用IL注入自动生成代码。
下图显示了整个过程的工作原理:
我们可以引用Fody 引擎的核心代码库,然后扩展做我们自己的自动化操作。
有几个比较知名的实现:
1、实现守卫模式的空参数检查:Fody/NullGuard
2、方法计时:Fody/MethodTimer
3、使所有字符串比较不区分大小写:Fody/Caseless
4、在全局级别配置异步代码的 ConfigureAwait:Fody/ConfigureAwait
下面以ConfigureAwait.Fody为例示例下使用方法:
1、首先添加nuget包:
PM> Install-Package Fody
PM> Install-Package ConfigureAwait.Fody
2、然后生成在VS项目中右键生成,Fody会自动创建一个FodyWeavers.xml文件在根目录
3、默认xml文件不会设置ConfigureAwait(false),需要在FodyWeavers.xml的ConfigureAwait节点添加 ContinueOnCapturedContext="false"
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
4、可以了一切就绪。
使用ILSpy反编译程序集生成的dll,可以看到ConfigureAwait.Fody已经在编译期间自动在异步方法调用后面加上了.ConfigureAwait(continueOnCapturedContext: false)
本文暂时没有评论,来添加一个吧(●'◡'●)