2010-01-19 6 views

Répondre

0

Cela dépend comment vous approchez,

En général, ce ne est pas possible (qui retourne la valeur doit être renvoyée?), Mais rien ne vous empêche d'avoir une autre cible enveloppé dans un intercepteur, et l'avoir invoqué par l'intercepteur.

+0

Comment puis-je faire envelopper une autre cible et l'appeler de manière semi-automatique comme cela se produit lorsque j'appelle Proceed()? Scénario typique (tiré de votre tutoriel joliment écrit!): IStorage avec stockage de sauvegarde. Vous pourriez vouloir lire de l'un d'eux mais vous voulez exécuter des écritures/mises à jour aux deux. C'est très proche de ce que j'essaye d'accomplir sans aucune propagation de données externe. – Paperino

+0

dans ce cas, je disposerais simplement d'un intercepteur d'écriture/mise à jour explicite qui encapsulerait l'autre cible, intercepterait les méthodes Write/Update et les propagerait à sa cible avant de procéder à l'invocation réelle. –

0

je suis venu avec, mais il utilise la réflexion il est donc pas aussi bon que le soutien « natif » pour le type de proxy Y-adaptateur ...

public void Intercept(IInvocation invocation) 
{ 
    invocation.Proceed(); 
    ThreadPool.QueueUserWorkItem(new WaitCallback(
     (object o) => 
      { 
       invocation.Method.Invoke(newTarget, invocation.Arguments); 
      } 
      ) 
    ); 
} 

En utilisant les garanties de QueueUserWorkItem que le fil invoquant la la méthode ne va pas souffrir beaucoup en termes de performance ... Toute meilleure solution est plus que bienvenue!

Questions connexes