在Windsor注册和使用表格

本文关键字:表格 Windsor 注册 | 更新日期: 2023-09-27 18:29:28

我正试图弄清楚如何在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中,有一种方法可以注册所有的控制器,我正在寻找与表单类似的东西,但我很困惑,因为你必须显式实例化表单。所以,即使我一个接一个地注册每个表单,我也不知道如果不自己解决所有遗漏的问题,我会如何删除一个儿童表单或控件。

在Windsor注册和使用表格

您可以创建一个用于创建窗口的工厂接口。将其注入到需要创建和显示其他表单的表单中。

在VisualStudioMagazine最近的一篇文章中,我对WPF和Windsor做了类似的操作(请参阅IViewFactory实现)。这种方法应该很容易移植到WinForms。