Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf主视图模型与许多其他视图模型依赖关系_Wpf_Mvvm_Dependency Injection - Fatal编程技术网

Wpf主视图模型与许多其他视图模型依赖关系

Wpf主视图模型与许多其他视图模型依赖关系,wpf,mvvm,dependency-injection,Wpf,Mvvm,Dependency Injection,我正在开发一个wpf应用程序,我的主视图模型如下所示。如您所见,其他VM是通过ctor注入的。我需要这样做,因为所有的视图模型都需要填充主菜单 但我觉得这似乎不对。起初,由于应用程序很简单,我没有感觉到任何问题,但随着应用程序的增长,在我看来,ctor参数的数量在增长,这是不对的。在我看来,似乎违反了单一责任原则 public MultiControllerHomeViewModel ( MultiControllerViewModel MCvm, VigilantProces

我正在开发一个wpf应用程序,我的主视图模型如下所示。如您所见,其他VM是通过ctor注入的。我需要这样做,因为所有的视图模型都需要填充主菜单

但我觉得这似乎不对。起初,由于应用程序很简单,我没有感觉到任何问题,但随着应用程序的增长,在我看来,ctor参数的数量在增长,这是不对的。在我看来,似乎违反了单一责任原则

public MultiControllerHomeViewModel
(
    MultiControllerViewModel MCvm, 
    VigilantProcessListViewModel VPLvm, 
    MailSettingsViewModel MSvm, 
    DropboxSettingsViewModel DBSvm, 
    PushbulletSettingsViewModel PBSvm, 
    GeneralHelpViewModel GHvm, 
    LoginViewModel Lvm
)
{...}

有人能告诉我如何处理这个问题吗?

你可以创建一个
MainMenuViewModel
,它唯一的任务就是为主菜单提供数据。
MainMenuViewModel
将所有其他viewmodels作为构造函数参数,但由于它没有其他任何内容,因此不会违反单一责任原则


根据您的代码,您的
MultiControllerHomeViewModel
可能必须将
MainMenuViewModel
作为构造函数参数。

在我看来,就单一责任原则而言,您做的事情完全是“正确的”,如果MCHVM类的唯一职责是聚合许多viewmodels。但是,如果它有其他角色要执行,那么您可能希望将该类拆分为较小的类,每个类执行一个角色,并且无疑需要较少的子VM提供。这很有意义。谢谢