2009-07-05 8 views
0

Je rencontre un problème avec le bloc d'application d'injection de stratégie de la bibliothèque d'entreprise associé à ASP.NET MVC.Injection de politique avec les contrôleurs ASP.NET MVC

Dans ControllerFactory, je crée le contrôleur, puis j'appelle PolicyInjection.Wrap sur le contrôleur. Cela me rend un proxy transparent au contrôleur qui gère la chaîne de gestionnaire d'appels.

Enfin, je jette le proxy transparent à un IController et le renvoie.

Cela semble bien fonctionner, sauf qu'aucun des gestionnaires d'appels que j'ai définis pour mon contrôleur ne s'exécute. (Par exemple, j'ai un Logging Handler configuré, mais rien n'est enregistré par PIAB.)

Est-ce que mon casting final est en train de déconner? Comment appelle ControllerBase.Execute() dans mon contrôleur? Il semble que mon proxy devrait être utilisé. Quelqu'un utilisant PIAB sur les contrôleurs ASP.NET?

Répondre

1

J'utilise PIAB pour envelopper les contrôleurs ASP.NET MVC, et je fais en appelant

PolicyInjection.Wrap<IController>(instance)

qui encapsulera les méthodes IController. J'utilise également l'injection de stratégie pour envelopper le IActionInvoker qui est également utilisé, ce qui permet de consigner le nom de l'action.

Je n'ai pas eu de contrôleurs de wrapping réussis utilisant le wrapping MarshalByRefObject, mais le wrapping d'interface fonctionne comme un charme. Si vous souhaitez des informations supplémentaires, vous pouvez créer une interface avec toutes les méthodes d'IController, IActionFilter, IAuthorizationFilter, IExceptionFilter et IResultFilter, puis demander à vos contrôleurs d'implémenter cette interface. Ensuite, vous pouvez envelopper vos contrôleurs en tant qu'interface et recevoir plus d'appels via l'injection de stratégies.

J'espère que cela aide. Si vous avez des problèmes plus spécifiques, veuillez poster.

+0

Dans MVC 2, le contrôleur ne sous-classe plus MarshalByRefObject, car il n'a jamais travaillé avec PIAB. Essentiellement, la référence * this * du contrôleur est transmise à la place de la référence du proxy à des fins d'invocation, ce qui provoque le contournement des mécanismes PIAB. L'utilisation des interfaces suggérées dans cette réponse devrait continuer à fonctionner correctement. – Levi

Questions connexes