2012-11-15 72 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,則不存在虛擬查找來查找代理並調用它。