2012-09-01 57 views
0

我正在使用C#+ Unity(2.1)。如果調用來自外部,則攔截方法可以正常工作,但同一類中的方法之間只有第一個方法被攔截。 例如:統一攔截機制在同一類內的方法之間不起作用

[InterceptorAttribute] 
    public int A(int a, int b) 
    { 
     return B(a, b); 
    } 

    [InterceptorAttribute] 
    public int B(int a, int b) 
    { 
     return a+b; 
    } 

方法B()的調用不攔截。 任何人都可以幫忙嗎?

+5

本文應解釋爲何如此:http://msdn.microsoft.com/en-us/library/ff660861(v=pandp.20).aspx。通過快速閱讀,你似乎需要切換到虛擬方法攔截器。 –

回答

3

如果你看看如何實現攔截,就會明白爲什麼發生這種情況。攔截器基本上是環繞原始對象和轉發調用它,除了調用任何相關處理程序的代理:

public int A(int a, int b) 
{ 
    callHandlers(); 
    return originalObject.A(a, b); 
} 

public int B(int a, int b) 
{ 
    callHandlers(); 
    return originalObject.B(a, b); 
} 

即使在兩個電話分別截獲,一旦originalMethod.A被調用,調用B只會調用originalObject.B,而不是proxy.B

也許如果你解釋一下你正在使用攔截器,你可能會有更好的解決方案。

+0

我試圖清理幾個類,提取異常處理相關的代碼,非常相似和重複;並在堆棧跟蹤中添加額外信息(如方法params值)。但是如果有幾種方法叫別人來完成他的工作,我就麻煩了。現在,我正在玩小例子(比如之前使用的經典計算器)來弄清楚如何解決這個問題。感謝您的回答,非常有用。 –