编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

聊一下:了解NetCore中的Fody

wxchong 2024-06-19 22:39:25 开源技术 15 ℃ 0 评论

有没有想过这样一个场景,每当我早上离开家里的时候扫地机器人自动工作、窗帘自动拉开、所有灯光自动关闭,不需要每天不厌其烦地重复做这些动作?

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)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表