C# Castle动态代理不工作?

C# Castle动态代理不工作?,c#,.net,castle-dynamicproxy,C#,.net,Castle Dynamicproxy,我有以下课程: public class MyTest { public void Test() { } } 我创建了以下拦截器: public class MyInterceptor : IInterceptor { public void Intercept(IInvocation invocation) { invocation.Proceed(); } } 在我的代码中,我做到了: ProxyGener

我有以下课程:

public class MyTest
{
    public void Test()
    {

    }
}
我创建了以下拦截器:

public class MyInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        invocation.Proceed();
    }
}
在我的代码中,我做到了:

        ProxyGenerator g = new ProxyGenerator();

        g.CreateClassProxy<MyTest>(new MyInterceptor());

        MyTest t = new MyTest();
        t.Test();
这不应该击中调试器中的拦截方法吗?事实并非如此。我错过什么了吗

编辑:这是特定于Castle DynamicProxy的。

您必须将公共无效测试设置为公共虚拟无效测试,以便允许Castle DynamicProxy拦截该方法

动态代理是从类或对象生成子类的一种方法 其接口通常是一个模型。该子类覆盖每个 方法,它可以使您的方法成为虚拟的,以允许您这样做

有关Castle Dynamic Proxy的更多文档:

CreateClassProxy创建所谓的基于继承的代理。基于继承的代理是通过继承基类创建的。代理截取对类的虚拟成员的调用,并将它们转发给基实现。因此,只能截获类的虚拟成员。在您的示例中,您应该将测试方法标记为虚拟。看


复制您应该将测试方法标记为虚拟的;不使用任何代理,只创建一个新对象。var t=g.CreateClassProxynew MyInterceptor;-这将创建一个代理对象,所以接下来您可以调用它的方法:t.Test;可能重复的嗯。。。因此,如果我无法控制基类(它是一个.Net类),就无法钩住该方法?@SledgeHammer有一些技巧,但我没有尝试过。@SledgeHammer中描述的另一个选项
public class MyTest
{
    public virtual void Test()
    {
        Console.WriteLine("Hi");
    }
}

public class MyInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine("Was here");
        invocation.Proceed();
    }
}

void Main()
{
    ProxyGenerator g = new ProxyGenerator();
    var t = g.CreateClassProxy<MyTest>(new MyInterceptor());
    t.Test();
}