2010-11-11 51 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