2012-11-15 40 views
0

我有一个简单的界面:ninject拦截器 - 辅助方法

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时,我知道这不是由生成的代理调用的,这就是为什么它不起作用。但是有可能以同样的方式做到吗?

回答

1

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