如何做好莱坞原则+;DI和x2B;WPF&x2B;统一

如何做好莱坞原则+;DI和x2B;WPF&x2B;统一,wpf,dependency-injection,unity-container,Wpf,Dependency Injection,Unity Container,我目前正在开始开发一个新的WPF应用程序,其中我使用Unity作为DI容器。现在,我正在App.xaml.cs中这样做DI protected override void OnStartup(StartupEventArgs e) { var container = new UnityContainer(); UnityConfigurationSection section = (UnityConfigurationSection)Configurati

我目前正在开始开发一个新的WPF应用程序,其中我使用Unity作为DI容器。现在,我正在App.xaml.cs中这样做DI

protected override void OnStartup(StartupEventArgs e)
    {
        var container = new UnityContainer();
        UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
        container = (UnityContainer)section.Configure(container);
        WPFUnityContainer.Instance = container;

        var mainwindow = new MainWindow();
        var mainmodel = container.Resolve<ViewModel.MainWindowViewModel>();
        mainwindow.DataContext = mainmodel;
        mainwindow.Show();

        base.OnStartup(e);
    }

如您所见,我注入groupRepository只是为了将其传递给LookUpGroupDialogViewModel。我可以将IGroupRepository放在ManageUserViewModel的ctr之外,直接通过容器解决它,但我认为这违反了好莱坞原则。在WPF中,如何解析所有依赖项,以便容器调用我?:)

在我看来,您添加到
\u managementworkspace
的视图模型必须具有某种公共抽象(除非集合完全没有类型化,只接受任何
对象
)-我假设这是
WorkspaceViewModel
类型

这意味着您可以通过将构造函数更改为如下所示来巧妙地解决问题:

public MainWindowViewModel(IUserRepository userRepository, IGroupRepository groupRepository)
    {
        this._ManagementWorkSpaces = new ObservableCollection<WorkspaceViewModel>();
        this._ManagementWorkSpaces.Add(new ManageApplicationsViewModel());
        this._ManagementWorkSpaces.Add(new ManageUserViewModel(userRepository, groupRepository));

    }
public MainWindowViewModel(ObservableCollection<WorkspaceViewModel> workSpaces)
{
    this._ManagementWorkSpaces = workSpaces;
}
public主窗口视图模型(ObservableCollection工作区)
{
这。_managementworkspace=工作区;
}
让您担心
ObservableCollection
实例是如何解析的

public MainWindowViewModel(ObservableCollection<WorkspaceViewModel> workSpaces)
{
    this._ManagementWorkSpaces = workSpaces;
}