WPF MDI应用程序中的合成根在哪里?

WPF MDI应用程序中的合成根在哪里?,wpf,dependency-injection,inversion-of-control,mdi,composition,Wpf,Dependency Injection,Inversion Of Control,Mdi,Composition,在传统的MDI应用程序中,一些对象(窗体)将在命令出现时创建(例如,按下功能区按钮),因此它可能是一个合成点。我对这种应用程序中的合成根很熟悉。我在某个地方读到,我们可以使用一个看起来像服务定位器的视图定位器。正如您所知,服务定位器模式受到一些人的谴责 现在请就这个问题向我提出建议 提前感谢。无论ViewModelLocator是否为服务定位器,以及 在任何情况下,WPF应用程序的合成根是-应用程序是否是MDI应用程序都不会改变这一点 因为在MDI应用程序中,您可以有任意数量的子窗口,所以您很可

在传统的MDI应用程序中,一些对象(窗体)将在命令出现时创建(例如,按下功能区按钮),因此它可能是一个合成点。我对这种应用程序中的合成根很熟悉。我在某个地方读到,我们可以使用一个看起来像服务定位器的视图定位器。正如您所知,服务定位器模式受到一些人的谴责

现在请就这个问题向我提出建议


提前感谢。

无论ViewModelLocator是否为服务定位器,以及

在任何情况下,WPF应用程序的合成根是-应用程序是否是MDI应用程序都不会改变这一点


因为在MDI应用程序中,您可以有任意数量的子窗口,所以您很可能需要一个抽象工厂来创建每个ViewModel。

非常感谢mark,通常我希望视图模型包含一个UnitOfWork(每个表单的UnitOfWork)。对于抽象工厂方法,我应该使用方法注入吗?换句话说,抽象工厂方法接收unitofwork抽象和其他内容,以找到要创建的适当视图模型。是否正确?另一个问题是谁应该创建表单实例?它会是抽象工厂吗?我使用UserControls作为我的表单。UoW基本上是一个短暂的依赖项,因此听起来像是最好由(注入的)抽象工厂创建的。谁创建表单实例?因为您使用的是WPF,所以我建议应用MVVM模式。这意味着是WPF模板引擎根据ViewModel的类型创建视图。如果将其放在合成根目录中,则不会: