Verwendung der Abhängigkeitsinjektion mit ASP.NET-Webformularen
Ich bin versuchen zu arbeiten, eine Möglichkeit zur Nutzung von dependency injection mit ASP.NET Web Forms-Steuerelemente.
Habe ich viele Steuerelemente, die repositories erstellen Sie direkt und nutzen diese, um Zugang und die Bindung an die Daten etc.
Ich bin auf der Suche nach einem Muster, wo ich kann, pass-Repositorys, um die Steuerelemente extern (IoC), so dass meine Kontrollen bleiben nicht bewusst, wie die Repositorys aufgebaut sind und wo Sie herkommen etc.
Ich würde es vorziehen, nicht zu haben, eine Abhängigkeit von den IoC-container von meinem Steuerelemente, daher möchte ich nur in der Lage sein zu konstruieren, die die Steuerelemente mit Konstruktor oder property-injection.
(Und nur um die Dinge zu komplizieren, sind diese Steuerelemente gebaut und platziert auf der Seite durch ein CMS zur Laufzeit!)
Irgendwelche Gedanken?
InformationsquelleAutor der Frage Schneider | 2009-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die automatische Konstruktor-Injektion durch ersetzen des Standard -
PageHandlerFactory
mit einer eigenen. Auf diese Weise können Sie einen überladenen Konstruktor zum laden der Abhängigkeiten. Ihre Seite könnte so Aussehen:Konfigurieren, dass benutzerdefinierte
PageHandlerFactory
getan werden kann, im web.config wie folgt:Ihre
CustomPageHandlerFactory
kann wie folgt Aussehen:Nachteil ist, dass dies nur funktioniert, wenn Ihr die Seite im Vollen Vertrauen. Lesen Sie mehr über es hier. Beachten Sie aber, dass die Entwicklung ASP.NET Anwendungen mit teilweiser Vertrauenswürdigkeit scheint eine verlorene Sache.
InformationsquelleAutor der Antwort Steven
Autofac unterstützt ziemlich dezent dependency injection in ASP.NET WebForms. Mein Verständnis ist es einfach nur Haken in die ASP.NET Seite-lifecycle mit einem http-Modul und ist Eigentum der Injektion. Der einzige Haken ist, dass für die Kontrollen, ich glaube nicht, dass dies geschieht solange, bis nach das Init-Ereignis.
InformationsquelleAutor der Antwort R0MANARMY
Ist der beste Weg, um eine Basisklasse für die Steuerelemente wie:
Wird, injizieren jedes Steuerelement, das erbt von der Basisklasse (verwendet structuremap). In Verbindung mit einem Grundstück basieren config, können Sie Steuerelemente wie:
Update 1: Wenn Sie können nicht die Steuerelemente Erben, vielleicht das CMS hat einen Haken rechts nach dem erstellen des controls, in dort können Sie rufen Sie den Aufbau. Auch wenn das CMS ermöglicht Ihnen die Haken etwas zu Holen der Instanz, die Sie verwenden könnten Konstruktor-basierte Injektion, aber ich bevorzuge Anhaftungen an diese spezifische Szenario asp.net nicht haben einen Haken.
InformationsquelleAutor der Antwort eglasius
Könnte man auch erstellen einige singleton-Instanzen in der Application_Start-global.asax Veranstaltung und haben Sie als public static readonly-Eigenschaften.
InformationsquelleAutor der Antwort Andrei Rînea
Dies ist eine Lösung, die ich vor kurzem verwendet wird, um die Haken in der pipeline (ich finde das verwirrt alle, die schaut mein code in der Zukunft, aber ja, ich sehe seine Vorteile als auch):
Dieser zeigt, wie man erstellen Sie Ihre eigenen, Leben Zeit-manager ziemlich leicht sowie Haken in einem IoC-container, wenn Sie dies wünschen. Oh, und ich bin auch mit einer Abfrage/Kommando-Struktur, die Art nicht verwandt, sondern mehr über die Gründe dafür kann hier gefunden werden:
Beschränken Sie Ihre Abstraktionen: Refactoring in Richtung reduzierte Abstraktionen
InformationsquelleAutor der Antwort Merritt