.Net进阶(5)使用Fody实现 .NET的静态编织

发布时间 2023-11-12 15:33:10作者: ~沐风

序言

 广义的面向切面编程,有静态编织和动态代理两种形式,它们都可以在某个方法执行前后插入某种处理逻辑。不同的地方在于,前者发生在编译时期间,后者发生在运行时期间。

对于 .NET 而言,最常见的静态编织方案是 PostSharp 和 Mono.Cecil,两者的区别是:一个付费、一个免费。

本文介绍的 Fody 是一个基于 Mono.Cecli 的扩展库,通过 Fody 的各种插件,我们可以向已有代码织入特定的功能,譬如 Rougamo.Fody 这个插件可以让我们对方法进行拦截。

基于这个原理,我们实现了一个完全不同于动态代理的拦截器。动态编织的本质是修改 IL 代码,对于这一点我们可以通过 ILdasm.exe 这个工具来验证。

为了进一步了解 Fody 是如何修改 IL 代码的,我们参照 Fody 的规范实现了一个自定义的插件,在这个过程中,我们了解了几个常见 IL 指令,以及如何通过 Emit 来生成 IL 指令。

此时,我们就接触到比表达式树更为底层的东西,而操作 IL 指令更是让我们体会到写汇编语言的酸爽,同时让我们对 .NET 的编译原理有了更为直观的认识。

资料

https://zhuanlan.zhihu.com/p/557599565