我试图使用IOC/DI容器,而是什么时候来创建一个子窗口,什么是最好的做法是什么?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容器,我所有的家长窗口都必须通过工厂,这不是使我的工厂成为新的“服务器定位器”。
有没有其他更好的解决方案呢?
相关:https://stackoverflow.com/questions/38417654/winforms-how-to-register-forms-with-ioc-container/38421425#38421425 – Steven
@Steven不能解决我的问题 – LeY