我有一个简单的界面:
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时,我知道生成的代理不会调用它,这就是为什么它不起作用。但是有可能以同样的方式做到吗?
答案 0 :(得分:1)
Ninject围绕Test类的实际实例创建一个代理对象。您的方法不是虚拟的,因此应使用“new”而不是“override”创建代理的任何覆盖。因此,如果从Method2调用Method1,则没有虚拟查找来查找代理并调用它。