2009-07-05 8 views
0

Ich habe ein Problem mit dem Richtlinieninjektionsanwendungsblock von Enterprise Library in Verbindung mit ASP.NET MVC.Richtlinieninjektion mit ASP.NET MVC-Controllern

In meiner ControllerFactory erstelle ich den Controller und dann PolicyInjection.Wrap auf dem Controller aufrufen. Dies gibt mir einen transparenten Proxy an den Controller zurück, der die Call-Handler-Kette verwaltet.

Schließlich verworfen ich den Transparent Proxy zu IController und zurück.

Dies scheint gut zu funktionieren, außer dass keiner der Call-Handler ausgeführt, die ich für meinen Controller definiert habe. (Zum Beispiel habe ich einen Logging Handler konfiguriert, aber nichts wird von PIAB protokolliert.)

Ist mein letzter Cast das irgendwie kaputt? Wie ruft ControllerBase.Execute() in meinen Controller? Es scheint, als ob mein Proxy verwendet werden sollte. Wer nutzt PIAB auf ASP.NET-Controllern?

Antwort

1

ich PIAB bin mit ASP.NET MVC-Controller wickeln, und ich tue so von

PolicyInjection.Wrap<IController>(instance) Aufruf

, die die IController-Methoden umbrechen. Ich verwende auch die Richtlinieneinfügung, um den IActionInvoker zu umbrechen, der ebenfalls verwendet wird, wodurch der Aktionsname protokolliert werden kann.

Ich hatte keinen Erfolg beim Einschließen von Controllern mit dem MarshalByRefObject-Wrapping, aber das Wrapping der Benutzeroberfläche funktioniert wie ein Zauber.

Wenn Sie weitere Informationen benötigen, können Sie eine Schnittstelle erstellen, die über alle Methoden von IController, IActionFilter, IAuthorizationFilter, IExceptionFilter und IResultFilter verfügt und Ihre Controller dann diese Schnittstelle implementieren lassen. Dann könnten Sie Ihre Controller als diese Schnittstelle einbinden und mehr Anrufe über die Richtlinieneinspeisung erhalten.

Ich hoffe, dass hilft. Wenn Sie spezifischere Probleme haben, schreiben Sie bitte.

+0

In MVC 2, Controller nicht mehr Unterklassen MarshalByRefObject, weil es nie mit PIAB gearbeitet hat. Im Wesentlichen wird die tatsächliche * this * -Referenz des Controllers anstelle der Proxy-Referenz zum Zweck des Aufrufs weitergegeben, wodurch die PIAB-Mechanismen umgangen werden. Die Verwendung von Schnittstellen wie in dieser Antwort vorgeschlagen sollte weiterhin gut funktionieren. – Levi