Регистрация и использование форм с Виндзор - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь понять, как использовать NHibernate / Windsor в приложении Windows Forms.У меня есть это в моем основном методе:

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 голосов
/ 31 марта 2012

Вы можете создать заводской интерфейс для создания окон. Введите это в формы, которые должны создавать и отображать другие формы.

Я сделал нечто подобное с WPF и Windsor в недавней статье для Visual Studio Magazine (см. Реализацию IViewFactory). Такой подход должен довольно легко портировать на WinForms.

...