0

我有一个简单的界面:

public interface ITest
{
      void Method1();
      void Method2();
}

和实施:

public class Test:ITest
{
      public void Method1()
      {

      }
      public void Method2()
      {
           //Method1();
      }
}

自定义拦截器:

public class CustomInterceptor:IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
          invocation.Proceed();
    }
}

现在,当我在那里执行两种方法时:

ITest obj = getting through ninject
obj.Method1();
obj.Method2();

我的拦截器调用了两次没关系。但是当我取消注释 Method2() 的主体时,不会调用 Method1() 的拦截器。我正在寻找该怎么做,因为我希望拦截器被解雇。当我从第二个调用 Method1 时,我知道生成的代理不会调用它,这就是它不起作用的原因。但是有可能以同样的方式做到这一点吗?

4

1 回答 1

1

Ninject 围绕 Test 类的实际实例创建一个代理对象。您的方法不是虚拟的,因此应该使用“new”而不是“override”来创建代理的任何覆盖。因此,如果您从 Method2 调用 Method1,则没有虚拟查找来找到代理并调用它。

于 2012-11-15T15:34:32.103 回答