2009-09-08 11 views
1

Existe-t-il un moyen de créer un proxy d'un type de délégué et d'implémenter des interfaces supplémentaires dans DynamicProxy2 et également d'intercepter les appels au délégué généré?Castle.DynamicProxy2 génère le proxy du type de délégué

La façon dont je génère normalement des proxies génère une exception car les types de délégués sont scellés.

+1

Comme suite à ma réponse. Dans DP 2.2 il sera beaucoup plus facile (ok, sérieusement, maintenant c'est vraiment difficile) d'étendre les générateurs de proxy actuels et/ou d'en ajouter de nouveaux (il y a une branche dans le dépôt pour cela si vous voulez regarder le code). Vous pouvez donc créer un type avec une méthode avec signature que vous choisissez (comme celle du type de délégué que vous ciblez) et exposer la méthode sur l'instance via un nouveau délégué qui enveloppe le délégué fourni par l'utilisateur. Cela devrait vous mettre en place pour le cas général. Envoyez-moi un email pour plus de détails si vous voulez continuer cette discussion. –

+0

Je vous ai envoyé un e-mail en fait, cela semble intéressant, en attente de votre réponse! –

Répondre

0

Patrik,

Vous n'avez pas besoin DynamicProxy aux 'proxy' délégués Cela devrait être suffisant:

Action delegateToproxy = new Foo().Bar; //Bar is public void Bar(){} 
Action proxy = delegate 
       { 
        Console.WriteLine("Intercepted!"); 
        delegateToProxy(); 
       } 
return proxy; 

[MISE À JOUR: que aswer était pas pertinente à ce problème spécifique] Quel genre d'API voulez-vous exposer pour cela?

Si vous souhaitez suivre cette conversation, contactez-moi par e-mail ou lancez une discussion sur le groupe d'utilisateurs de Castle.

+0

Comme vous le dites dans votre mise à jour, c'est seulement à mi-chemin, le problème qui reste est que je ne peux pas l'implémenter des interfaces supplémentaires. Je marquerai cette réponse comme la réponse acceptée, car c'est une bonne réponse dans le cas général. –