in asp.net-mvc Ich habe die Windsor Controller Factory, die alle Abhängigkeiten in die Controller injiziert, aber wie bekommen Sie das in Windows Forms?
Wenn zum Beispiel diese Form1, wie bekomme ich eine Instanz von Form1, sollte ich Auflösung (die von einigen Personen ServiceLocator und Anti-Muster genannt wird) verwenden?
%Vor% Ja, in program.cs solltest du windsor Form1
auflösen lassen. Um das Formular im Designer anzeigen zu können, fügen Sie einen leeren Konstruktor hinzu und dekorieren ihn mit dem Attribut Obsolete
.
Die Verwendung von Constructor Injection für Formulare (oder andere Ansichten in anderen UI-Frameworks) ist oft problematisch, da der Visual Studio-Designer einen Standardkonstruktor erwartet und annimmt.
In jedem Fall sollte ein Formular oder eine andere visuelle Kontrolle wirklich eine dumme Ansicht ohne Verhalten sein. Zweck ist es, alle Daten anzuzeigen, die Sie an sie binden. Die Verwendung der Datenbindung -Funktionen hilft Ihnen oft dabei, Sie in diese passive Form der Anzeige einzuschränken.
Dies bedeutet, dass Sie eine Art Controller benötigen, der die Ansicht (Form) instanziieren und die Datenquelle an sie binden kann.
Das ist viel einfacher mit einer Technologie wie WPF, aber es ist auch mit Windows Forms möglich. Für inspiration , wie Sie dies mit Windows Forms tun, schlage ich vor, dass Sie sich die (jetzt im Ruhestand) Composite Application Block - es ist zu kompliziert, aber es sollte Ihnen einige Ideen geben, wie Sie etwas Ähnliches selbst implementieren können.
Tags und Links c# winforms ioc-container inversion-of-control castle-windsor