代码之家  ›  专栏  ›  技术社区  ›  Roman Pokrovskij Archil Labadze

什么是.net中的代码注入(作为编程技巧)?

  •  3
  • Roman Pokrovskij Archil Labadze  · 技术社区  · 15 年前

    当然,在大多数常识中,“这是一种以作者不想的方式影响程序行为的方法”(wiki)。

    然后,所有使用技术的反射和typebuilder也可以用“代码注入”命名,但没有人这样做。

    当我一直认为“代码注入”是关于“运行时”的:就像在另一个进程中启动线程来获取一些有趣的数据一样,我惊讶于Reflexil是如何理解的:“在“设计时间”中将C指令转换成IL,保存已编辑的程序集,并用新的(10%,我错过了一些东西)替换旧程序集。

    所以现在我感兴趣的是.NET中的哪些技术被命名为“代码注入”术语?

    顺便说一句,我很想知道:是否可以在运行时用指向我自己的方法的指针替换非常私有、多次嵌套的系统类的“虚拟方法表”中的“指向虚拟方法的指针”。纯代码注入从我的理解。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Hans Passant    15 年前

    NET中的代码注入相当困难。主要是因为代码直到最后一刻才存在。它开始执行之前的一小部分时间,由JIT编译器生成。

    实际的方法使用IL重写,例如在AOP中很常见。这是离线发生的, 之前 程序甚至开始执行。这不再是真正的“注入”,而是物理地更改磁盘上的程序。

    有一种内联IL重写技术,它使用非托管的profiler接口。很不切实际,一篇记录这种方法的杂志文章 available here . 它是相当过时的,剖析器API从那时起已经有了很大的变化。从没听说过有工具会用这个。

        2
  •  1
  •   Robert Harvey    15 年前

    面向方面编程(AOP)使用代码注入拦截方法调用。

        3
  •  1
  •   Jim Mitchener    15 年前

    当我听到“代码注入”时,我倾向于假设他们在谈论 Inversion of Control . Net中的一个很好的例子是 Ninject 框架。

    推荐文章