【发布时间】:2016-09-28 18:12:33
【问题描述】:
我正在尝试使用 IOC/DI 容器,但是在创建子窗口时,最佳做法是什么?
我陷入困境的地方是:
public class ParentWindow : Form
{
public void OpenChildWindow()
{
var child = IocContainer.Instance.Resolve<ChildWindow>(); // big issue !!! an-ti server locator pattern
child.Show();
}
}
或者
public class ParentWindow : Form
{
private Container _container
public ParentWindow(Container container) // no, no, you have dependence on container
{
}
public void OpenChildWindow()
{
var child = _container.Resolve<ChildWindow>();
child.Show();
}
}
我的解决方案
public class ParentWindow : Form
{
private IFormFactory _factory
public ParentWindow(IFormFactory factory) // inject from IOC container
{
}
public void OpenChildWindow()
{
var child = _factory.CreateChildWindow();
child.Show();
}
}
但是通过我的解决方案,我的工厂变成了我自己的 IOC 容器,我所有的父窗口都必须通过工厂,这不是让我的工厂成为新的“服务器定位器”吗?
还有其他更好的解决方案吗?
【问题讨论】:
-
@Steven 没有解决我的问题
标签: c# winforms dependency-injection ioc-container