質問

Method Callを監査するためにUnity Interceptionを使用しています。すべてが正常に機能します:メソッドが傍受され、メソッド名とその他の考えを取得できます。また、自分の方法の結果を得たいです。たとえば、メソッドがリストオブジェクトを返した場合、Imethodreturn.returnValueにのみアクセスできます。そのタイプはオブジェクトです。私の場合、結果の根本的なタイプはリストです。これは、imethodreturn.returnvalueの返品オブジェクトをこのようにキャストできます。 (リスト)Imethodreturn.ReturnValueの問題:傍受された方法の戻りタイプがわからないときは、この作業をしなければなりません。つまり、インターセプトされたメソッドの実行により、文字列タイプ、その他のリスト、その他のリストなどを返すことがあります。容易さは巨大です。可能であれば、Imethodreturn.returnValueを傍受された方法の返品値の根底にあるタイプに変換する方法が必要です。最終的なターゲットは、メソッド結果をXMLに変換し、データベースにデータを保存することです。監査目的。

これがコードです(フォーマットはごめんなさい...)

/// Invoke Method public Imethodreturn Invoke(ImethodInvocation input、getNexthRellDelegate getNext){imethodreturn resultData = getNext()(input、getNext); //メソッド実行後のインジェクション。 this.injectionCall(input、resultData);
runter resultData; }

//ここに問題があります... private void InjectionCall(ImethodInvocation input、imethodreturn result){string methodname = 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);

}

ありがとう。

役に立ちましたか?

解決

本当の問題は、傍受自体の問題よりも傍受された方法によって返されたオブジェクトからの変換でした。オブジェクトをXMLにシリアル化することで解決しました。私が見つけた解決策は、このリンクにあります:

xmldocumentにオブジェクトをシリアル化します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top