拦截对另一个程序集中的方法的调用

时间:2014-09-17 12:42:58

标签: c# .net reflection

有可能通过反思来做到以下几点吗?不需要反思。任何方法都可以接受。

我有两个程序集,VenderAssembly(我没有源代码)和MyAssembly。我想在调用MyAssembly.MyMethod时调用VenderAssembly.VendorMethod,其中MyAssembly不是负责调用VenderMethod的程序集。

我不需要访问传递给VendorMethod的参数值。我只需要在每次调用MyMethod时触发VendorMethod

2 个答案:

答案 0 :(得分:3)

您无法动态地调用方法'当另一个人被召唤时。

您无法注册方法,只能注册事件。因此,除非VendorMethod()调用事件VendorMethodCalledyou can subscribe,否则无法调用。

答案 1 :(得分:2)

Ziad Elmalki撰写了a description of how to replace a method implementation at runtimepublished code

看来该技术的关键部分是要求JIT编译一个与要替换的签名具有相同签名的方法,然后覆盖该类型的方法表(vtbl的托管版本)以引用新方法。

替换将是无条件的,如果你想测试调用是否来自程序集外部,你需要进行堆栈遍历(.NET使这相当容易)。

当然,这将无法替换足够小的方法让JIT选择内联它们。