2010-11-11 17 views
0

J'utilise l'interception d'unité pour auditer un appel de méthode. Tout fonctionne bien: la méthode est interceptée et je peux obtenir le nom de la méthode et d'autres pensent. Je veux aussi obtenir le résultat de ma méthode. Par exemple, si ma méthode renvoie un objet List, je ne peux accéder qu'à IMethodReturn.ReturnValue, dont le type est un objet. Dans mon cas, le type sous-jacent du résultat est List afin que je puisse lancer l'objet de retour IMethodReturn.ReturnValue comme ceci. (Liste) IMethodReturn.ReturnValue Problème: Je dois faire ce travail quand je ne connais pas le type de retour de la méthode interceptée. C'est-à-dire que l'exécution de la méthode interceptée peut parfois renvoyer un type de chaîne, une autre une liste, une autre une liste et ainsi de suite. Les possibilités sont énormes. J'ai besoin, si possible, d'un moyen de convertir IMethodReturn.ReturnValue en le type sous-jacent de la valeur de retour de la méthode interceptée. L'objectif final est de transformer le résultat de la méthode en XML et de sauvegarder les données dans une base de données. À des fins d'audit.Obtenir les informations de méthode interceptées par Unity (Interception d'unité, IMethodReturn)

Voici le code (désolé pour le format ...)

/// méthode Invoke publique IMethodReturn Invoke (entrée IMethodInvocation, GetNextHandlerDelegate getNext) { IMethodReturn resultdata = getNext() (entrée, getNext) ; // Injection après l'exécution de la méthode. this.InjectionCall (entrée, résultatData);
renvoie le résultatData; }

// Voici le problème ... vide InjectionCall privé (entrée IMethodInvocation, résultat IMethodReturn) { chaîne 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); 

}

Merci.

Répondre

1

Le vrai problème était la transformation de l'objet renvoyé par la méthode interceptée plus qu'un problème d'Interception elle-même. Je l'ai résolu en sérialisant l'objet en Xml. La solution que j'ai trouvée est dans ce lien:

Serialize object to XmlDocument