2012-03-30 12 views
0

私はWindowsフォームアプリケーションでNHibernate/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); 
} 

DIはすべて私のサービスのために、私のメインフォームのために働く、素晴らしい作品:私は私のメインの方法でこれを持っています。私の質問は、そこからどのように前進するのだろうか?私は最初のフォームが動作していますが、他のフォームやコントロールにどのように依存関係を注入するのですか? MVCにはすべてのコントローラを登録する方法がありますが、フォームと同様のものを探していますが、フォームを明示的にインスタンス化する必要があるため混乱します。だから、私が各フォームを1つずつ登録しても、私がポイントを逃した自分自身をすべて解決することなく、どのように子供のフォームやコントロールを撃墜するのか分かりません。

答えて

2

ウィンドウを作成するためのファクトリインタフェースを作成できます。これを他のフォームを作成して表示する必要があるフォームに挿入します。

私は最近のVisual Studio Magazine articleIViewFactory実装を参照)のWPFとWindsorと同様のことをしました。そのアプローチは、WinFormsにかなり簡単に移植する必要があります。

+0

ありがとう、私は全部見渡して、これの適切な例を見つけることができませんでした – Nick

+0

私はそれを二番目に!素晴らしい記事。 –