62

我今天刚看到Ayende关于 PostSharp 的帖子。我下载了代码并试用了一下,我认为这是我见过的最酷、最容易使用的 AOP 处理方式。

Ayende 在他的帖子中说 PostSharp 通过IL Weaving实现了它的魔力。现在,在某个抽象层面上,我可以推断出这意味着什么,但我想看看是否有更详细的答案。不幸的是,很长一段时间以来第一次,谷歌对我来说是空的。所以我认为这对于 StackOverflow 来说是一个很好的问题(因为我已经订阅 Jeff 的博客几年了,并且知道这个网站正在做它的事情)。

那么 IL Weaving 究竟是什么以及它是如何实现的呢?

4

3 回答 3

34

编织是指将功能注入现有程序的过程。这可以在概念上在多个级别上完成:

  • 源代码编织会在代码编译之前注入源代码行
  • IL weaving(用于 .NET)将代码作为 IL 指令添加到程序集中
  • ByteCode weaving (for Java) 适用于类文件,请参阅这些注释 wrt AspectJ

从理论上讲,您可以更深入地使用编译为本机指令的可执行文件进行编织,但这会增加很多复杂性,而且我不知道有什么这样做的。

于 2008-10-09T22:04:42.783 回答
11

IL Weaving 类似于 ByteCode Weaving。.Net 编译为由 .NET clr 运行的中间语言。IL Weaving 基本上是在分析和改变中间语言。因为它是在那个级别完成的,所以它可以为所有 .NET 语言完成。

于 2008-10-09T22:00:17.037 回答
4

如果您改为使用 Google MSIL Injection 可能会有所帮助。这个链接来自PostSharp,它解释得很好。

我的公司最近购买了一款名为 dynaTrace 的产品,用于性能诊断。它使用 MSIL 注入来检测方法。基本上它会在你的方法之前和之后添加 IL 代码(我相信它还有很多)。

这是一个相当复杂但很好的过程解释。

于 2008-10-09T22:02:27.423 回答