問題 在實際開發過程當中我們可能會針對某些類型使用動態代理技術(AOP),註入了一些攔截器進行處理,但是一旦某個類型被動態代理了,那麼就會生成一個代理類。這個時候在該類內部使用 方法獲取到的 類型並不是實際類型的 ,而是代理類的 。 解決 那麼我們如何在代理類當中獲取到具體類型的 呢?其實 Cast ...
問題
在實際開發過程當中我們可能會針對某些類型使用動態代理技術(AOP),註入了一些攔截器進行處理,但是一旦某個類型被動態代理了,那麼就會生成一個代理類。這個時候在該類內部使用 GetType()
方法獲取到的 Type
類型並不是實際類型的 Type
,而是代理類的 Type
。
解決
那麼我們如何在代理類當中獲取到具體類型的 Type
呢?其實 Castle 給我們提供了一個工具類,叫做 ProxyUtil
,可以使用該工具類來獲取到代理類所攔截的具體類型,下麵的代碼就是具體的使用方法。
DEMO 代碼:
/// <summary>
/// 獲得實例對象的真實類型
/// </summary>
/// <param name="instance">待獲取類型的實例對象</param>
/// <returns>實例對象的真實類型</returns>
public static Type GetProxyClassRealType(this object instance)
{
Type realType;
if (ProxyUtil.IsProxy(instance))
{
realType = ProxyUtil.GetUnproxiedType(instance);
}
else
{
realType = instance.GetType();
}
return realType;
}