2012-03-30 9 views
0

Ich versuche herauszufinden, wie NHibernate/Windsor in einer Windows Forms-Anwendung zu verwenden. Ich habe dies in meinem Haupt-Methode:Registrieren und Verwenden von Formularen mit Windsor

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    var container = new WindsorContainer(); 

    var containerAdapter = new WindsorContainerAdapter(container); 
    var MarketingDatabaseSessionFactory = new NHibernate.Cfg.Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.config")).BuildSessionFactory(); 

    NCommon.Configure.Using(containerAdapter) 
     .ConfigureState<DefaultStateConfiguration>(stateConfig => 
                stateConfig.UseCustomSessionStateOf<HttpSessionState>()) 
     .ConfigureUnitOfWork<DefaultUnitOfWorkConfiguration>(x => 
                  x.AutoCompleteScope()) 
     .ConfigureData<NHConfiguration>(config => config.WithSessionFactory(() => MarketingDatabaseSessionFactory) 
      .WithDistinctResults()); 



    container.AddComponent("main", typeof(Form1)); 

    container.Register(AllTypes.FromAssemblyNamed("ProductManager.Services").BasedOn(typeof(IService)).WithService.Select((t, baseType) => t.GetInterfaces())); 

    ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container)); 

    Form1 mainForm = container.Resolve<Form1>(); 
    Application.Run(mainForm); 
} 

Das funktioniert gut, die DI arbeitet für alle meine Leistungen und für meine Hauptform. Meine Frage ist, wie komme ich von dort vorwärts? Ich habe die erste Form zu arbeiten, aber wie injiziere ich Abhängigkeiten in die anderen Formen und Kontrollen? In MVC gibt es eine Möglichkeit, alle Ihre Controller zu registrieren, ich suche etwas Ähnliches mit Formularen, aber ich bin verwirrt, weil Sie die Formulare explizit instanziieren müssen. Also, selbst wenn ich jedes Formular eins nach dem anderen anmelde, weiß ich nicht, wie ich ein Kind von der Form oder Kontrolle abschießen würde, ohne selbst alles zu lösen, was den Punkt verfehlt.

Antwort

2

Sie könnten eine Factory-Schnittstelle zum Erstellen von Fenstern erstellen. In Formulare einbetten, die andere Formen erstellen und anzeigen müssen.

Ich habe etwas ähnliches mit WPF und Windsor in einer aktuellen Visual Studio Magazine article (siehe die IViewFactory Implementierung). Dieser Ansatz sollte ziemlich einfach auf WinForms portiert werden.

+0

Vielen Dank Sir, ich sah überall und konnte kein richtiges Beispiel für diese – Nick

+0

ich zweitens finden! Großartiger Artikel. –

Verwandte Themen