我可以在运行时将.NET方法调用重定向到新方法吗?

Jef*_*ock 4 .net hook detours

假设我有以下.NET类:

public class C
{
    public void M()
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

public class D
{
    public void N()
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个类位于不同的程序集中的不同名称空间中.有没有办法让所有调用C.M()自动"重定向" D.N()?因此,调用方法就是调用它C.M,但实际上,D.N它实际上是被调用的,具有任何可能的参数C.M.如果这种情况发生在类的所有实例化中,或仅针对一个特定对象,则无关紧要.

MS Research的Detours库可以为正常的Win32 DLL导出做一些非常类似的事情.我正在寻找一种方法来使用.NET方法.

Ste*_*ary 5

Microsoft创建了一个名为Moles的 Detours托管等效项.我唯一不确定的是许可证; 它用于测试(作为Pex的一部分).

依赖注入需要修改源; PostSharp需要修改二进制文件; 但是Moles可以在运行时动态完成.