2012-10-18 35 views
1

如何獲取被Unity的VirtualMethodInterceptor攔截的代理對象的「原始」類型? 我有一樣的東西:在Unity中獲取原始類型的攔截對象

T obj = (T)Intercept.NewInstance(typeof(T), new VirtualMethodInterceptor(), new[] { new MyInterceptor() }); 

然後當我問的obj類型它會像DynamicModule.ns.Wrapped_TheRealType_7615f35579e1442192a7aaf806733b7b

如何獲得TheRealType的通過代碼類型?

回答

2

您可以下降生成的類型的繼承層次結構,直到到達正確的類型。

Type original = target.GetType(); 
while (original.Name.StartsWith("Wrapped_")) 
{ 
    original = original.BaseType; 
} 

不漂亮,但它應該做的伎倆。

+2

對於截獲的VirtualMethod,應該可以工作 - 對於基於Interface的應用程序,您需要查看Target屬性。 –

+0

是的,我的問題是虛擬方法攔截。我希望Unity會有更好的 - 不是那麼棘手的方式。 – Bond

+0

@Bond對於消費者來說,使用生成的代理應該是完全透明的。我想這就是爲什麼Unity沒有提供識別潛在目標的方法。 –

相關問題