在WPF中使用DI容器在ViewModel构造函数中传递很多接口是否正常
Is it normal to pass many interfaces in ViewModel constructor using DI container in WPF
我有一个巨大的 WPF 项目。它使用:
- MVVM 光
- Microsoft.Unity 作为 ViewModelLocator 的容器
MainView 内容依赖于其他 UserControl:
<ContentControl Visibility="Visible"
Content="{Binding ContentViewModel}" />
ConcreateViewModelFactory 创建的内容的每个 ViewModel:
ContentViewModel =(SimpleViewModelBase) _extendedSearchVMFactory.CreateInstance();
所有 ViewModel 工厂都有在 ViewModelLocator 中注册的接口。
工厂示例:
public class MainViewModelFactory : IMainViewModelFactory
{
private IUnityContainer _container;
public MainViewModelFactory(IUnityContainer container)
{
_container = container;
}
public MainViewModel CreateInstance(df_role[] currentRoles)
{
var vm = _container.Resolve<MainViewModel>(
new ParameterOverride("currentRoles", currentRoles));
return vm;
}
}
MainViewModel 构造函数有大约 40 个参数来保留 ViewModel 构造函数的所有接口:
public MainViewModel(IDataService dataService,
IDialogService dialogService,
ISearchByIdViewModelFactory searchViewModelFactory,
ISearchByPhonesViewModelFactory searchByPhonesViewModelFactory,
IDoubleSearcherViewModelFactory doubleSearcherViewModelFactory,
IAnalysisOfDoubleSearchAlgorythmViewModelFactory analysisOfDoubleSearchAlgorythmViewModelFactory,...
我的问题:我该如何重构它?如果您有关于 DI+MVVM 的有用信息,我将不胜感激。
P.S。对不起我的英语。
MainViewModel 构造函数有很多参数。 MainViewModel 违反了 "Single Responsibility Principle"。理想情况下,任何 class 都不应该承担太多责任。
请通过下面的 link 了解 单一职责原则。
http://www.codeproject.com/Articles/703634/SOLID-architecture-principles 使用简单的 Csharp
link#1 谈论 SOLID 架构原则
SOLID 代表:
"S" - SRP(单一职责原则)
“O”——开闭原则
“L”- LSP(里氏代换原则)
“I”——ISP(接口隔离原则)
“D” - 依赖倒置原则。
MVVM:要了解MVVM,请通过下面的link
我有一个巨大的 WPF 项目。它使用:
- MVVM 光
- Microsoft.Unity 作为 ViewModelLocator 的容器
MainView 内容依赖于其他 UserControl:
<ContentControl Visibility="Visible"
Content="{Binding ContentViewModel}" />
ConcreateViewModelFactory 创建的内容的每个 ViewModel:
ContentViewModel =(SimpleViewModelBase) _extendedSearchVMFactory.CreateInstance();
所有 ViewModel 工厂都有在 ViewModelLocator 中注册的接口。 工厂示例:
public class MainViewModelFactory : IMainViewModelFactory
{
private IUnityContainer _container;
public MainViewModelFactory(IUnityContainer container)
{
_container = container;
}
public MainViewModel CreateInstance(df_role[] currentRoles)
{
var vm = _container.Resolve<MainViewModel>(
new ParameterOverride("currentRoles", currentRoles));
return vm;
}
}
MainViewModel 构造函数有大约 40 个参数来保留 ViewModel 构造函数的所有接口:
public MainViewModel(IDataService dataService,
IDialogService dialogService,
ISearchByIdViewModelFactory searchViewModelFactory,
ISearchByPhonesViewModelFactory searchByPhonesViewModelFactory,
IDoubleSearcherViewModelFactory doubleSearcherViewModelFactory,
IAnalysisOfDoubleSearchAlgorythmViewModelFactory analysisOfDoubleSearchAlgorythmViewModelFactory,...
我的问题:我该如何重构它?如果您有关于 DI+MVVM 的有用信息,我将不胜感激。
P.S。对不起我的英语。
MainViewModel 构造函数有很多参数。 MainViewModel 违反了 "Single Responsibility Principle"。理想情况下,任何 class 都不应该承担太多责任。
请通过下面的 link 了解 单一职责原则。
http://www.codeproject.com/Articles/703634/SOLID-architecture-principles 使用简单的 Csharp
link#1 谈论 SOLID 架构原则
SOLID 代表: "S" - SRP(单一职责原则) “O”——开闭原则 “L”- LSP(里氏代换原则) “I”——ISP(接口隔离原则) “D” - 依赖倒置原则。
MVVM:要了解MVVM,请通过下面的link