我写过一个有两个不同主窗口的WPF应用程序。通过查找在数据库中使用该程序的用户类型,我不知道在运行时启动哪一个。我目前的代码有效,但Castle Windsor通过新建两种窗口的对象图来完成大量的额外工作。
private readonly IMainWindow _mainWindow;
private readonly ISimplifiedMainWindow _simplifiedMainWindow;
public MainClass(
IMainWindow mainWindow,
ISimplifiedMainWindow simplifiedMainWindow)
{
_mainWindow = mainWindow;
_simplifiedMainWindow = simplifiedMainWindow;
}
public RunApp()
{ // pseudocode
if (user is fullUser) _mainWindow.Show();
else _simplifiedMainWindow.Show();
}
如何推迟创建我的窗口对象而不依靠制作一个基本上会复制Castle Windsor所做的抽象工厂?
答案 0 :(得分:1)
工厂实际上是我推荐的解决方案(以及我过去多次成功使用的解决方案来解决这个问题)。
我不会自己实施工厂,让温莎这样做(via a Typed Factory)。
public interface IWindowFactory
{
IMainWindow FullUserWindow();
ISimplifiedMainWindow SimplifiedUserWindow();
//optionally
void DestroyWindow(IWindow window);
}
现在您只需告诉Windsor为该界面构建工厂
container.AddFacility<TypedFactoryFacility>();
// later on, in your installer
container.Register(Component.For<IWindowFactory>()
.AsFactory()
.LifestyleTransient());
,您的应用代码更改为:
public RunApp()
{ // pseudocode
if (user is fullUser) Show(factory.FullUserWindow());
else Show(factory.SimplifiedUserWindow());
}