在WPF中使用DI容器在ViewModel构造函数中传递很多接口是否正常

Is it normal to pass many interfaces in ViewModel constructor using DI container in WPF

我有一个巨大的 WPF 项目。它使用:

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 了解 单一职责原则。

  1. 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

https://msdn.microsoft.com/en-us/magazine/dd419663.aspx