Wpf 我应该注射吗?我该怎么做?

Wpf 我应该注射吗?我该怎么做?,wpf,dependency-injection,prism,Wpf,Dependency Injection,Prism,好的,我正在WPF中使用MVVMC(或MVCVM)模式与Microsoft Prism合作 在聊天室模块中,我有一系列视图、视图模型和一个控制器 对于我的观点 ChatArea视图-显示要阅读的聊天信息。这是托管在一个TabControl区域内,这样我就可以在用户和其他用户之间拥有聊天窗口,或者可能是文件传输窗口,等等 UserAreaView-这是一个用户列表。右键单击具有上下文菜单以与它们交互。。。比如发送文件或耳语 MessageAreaView-用户在此处键入要发送给所有其他用户的消息

好的,我正在WPF中使用MVVMC(或MVCVM)模式与Microsoft Prism合作

在聊天室模块中,我有一系列视图、视图模型和一个控制器

对于我的观点

  • ChatArea视图-显示要阅读的聊天信息。这是托管在一个TabControl区域内,这样我就可以在用户和其他用户之间拥有聊天窗口,或者可能是文件传输窗口,等等
  • UserAreaView-这是一个用户列表。右键单击具有上下文菜单以与它们交互。。。比如发送文件或耳语
  • MessageAreaView-用户在此处键入要发送给所有其他用户的消息
对于每个视图,我都有相应的ViewModelChatAreaViewModel、UserAreaViewModel和MessageAreaViewModel。这些视图模型本质上只包含属性

例如,UserAreaViewModel定义了一个User类型的结构,它本质上只是一个名称。实际上,这是在类之外定义的,但仍然。。。它使用它。它有一个ObservableCollection来存储当前连接的所有用户的列表。它还具有定义为与用户交互的ICommand属性。现在我有SendFile,Whisper和Nudge。。。打算在未来增加更多

控制器将创建这些视图和视图模型,并将它们合并。它会更新它们,将ViewModel指定为相应视图的DataContext,并设置ViewModel的所有初始属性。在模块的生命周期内,它将对用户交互做出反应,并执行已分配给ViewModel的每个ICommand属性的DelegateCommand。这些将进一步改变ViewModel中属性的状态

我使用的是实际类型的视图和视图模型,而不是像这样的界面

#region Views

ChatAreaView viewChatArea;
UserListView viewUserArea;
MessageView viewMessageArea;
LoginPromptView viewLoginPrompt;

#endregion

#region ViewModels

ChatAreaViewModel viewModelChatArea;
UserAreaViewModel viewModelUserArea;
MessageAreaViewModel viewModelMessageArea;
LoginPromptViewModel viewModelLoginPrompt;

#endregion
如果我为视图和视图模型定义接口,并在控制器中对这些接口而不是具体实现进行操作,事情会变得更加整洁、耦合性更低吗?然后,我可以将它们注册到Module类中的容器中(本质上是每个模块的根)吗

我能从中得到什么?我将如何为每个视图实现一个接口以将它们与其他视图区分开来?他们什么都不做,除了有XAML。。。而ViewModel除了具有某些属性之外,实际上什么都不做。这些属性可能会发生变化。例如,在UserAreaViewModel上,我肯定希望添加更多命令,以便用户可以以不同的方式与另一个用户交互

有人能帮我吗?在我看来,我想我应该把这些东西抽象出来,但我真的不知道我应该用什么逻辑方法来处理它,或者说这样做是否明智。我能得到什么

谢谢你抽出时间。下图是我正在研究的一个例子。忽略“添加新项目”按钮和所有内容的样式。。。这不是我现在正在做的

  • 松散耦合-将来可以用完全不同的实现替换整个类
  • 自主开发。。可以插入虚拟UI/视图,直到最终UI准备就绪。两个部分可以同时演化(在有一个共同契约之后)
  • 无需向模块添加引用(实现视图)。可以使用ConfigurationModuleCatalog从配置文件中发现类型