2010-11-11 42 views
0

我正在使用統一監聽來審計方法調用。一切工作正常:方法被攔截,我可以得到方法名稱和其他想法。我也想得到我的方法的結果。例如,如果我的方法返回一個List對象,我只能訪問IMethodReturn.ReturnValue,其類型是一個對象。在我的情況下,結果的基礎類型是List,所以我可以像這樣投射IMethodReturn.ReturnValue返回對象。 (List)IMethodReturn.ReturnValue 問題: 當我不知道攔截方法的返回類型時,我必須做這個工作。也就是說,攔截方法的執行有時可以返回一個字符串類型,其他一個List,其他一個List等等。可能性非常大。 如果可能,我需要一種方法將IMethodReturn.ReturnValue轉換爲截取方法的返回值的基礎類型。 最終目標是將方法結果轉換爲xml並將數據保存到數據庫中。出於審計目的。獲取Unity截獲的方法信息(Unity Interception,IMethodReturn)

下面是代碼(抱歉格式...)

/// Invoke方法 公共IMethodReturn調用(IMethodInvocation輸入,GetNextHandlerDelegate GetNext)的 { IMethodReturn resultData = GETNEXT()(輸入,GetNext)的; //執行方法後注入。 this.InjectionCall(input,resultData);
return resultData; }

//這是問題所在... 私人無效InjectionCall(IMethodInvocation輸入,IMethodReturn結果) { 串方法名= input.MethodBase.Name;

// How to get the 
//List<object> resultList = (List<object>)result.ReturnValue ??? 
//Type type = resultData.ReturnValue.GetType() 

// Calling the audit service. IocFactory is the container helper object. 
//IAuditService srvAudit = IocFactory.Resolve<IAuditService>(); 
//srvAudit.RegisterData(methodName,null,null); 

}

感謝。

回答

1

真正的問題是由攔截方法返回的對象轉換而不是攔截本身的問題。我通過將對象序列化到Xml來解決它。我找到的解決方案是在這個鏈接:

Serialize object to XmlDocument