在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中,有一种方法可以注册所有的控制器,我正在寻找与表单类似的东西,但我很困惑,因为你必须显式实例化表单。所以,即使我一个接一个地注册每个表单,我也不知道如果不自己解决所有遗漏的问题,我会如何删除一个儿童表单或控件。
您可以创建一个用于创建窗口的工厂接口。将其注入到需要创建和显示其他表单的表单中。
在VisualStudioMagazine最近的一篇文章中,我对WPF和Windsor做了类似的操作(请参阅IViewFactory
实现)。这种方法应该很容易移植到WinForms。