如何做好莱坞原则+;DI和x2B;WPF&x2B;统一
我目前正在开始开发一个新的WPF应用程序,其中我使用Unity作为DI容器。现在,我正在App.xaml.cs中这样做DI如何做好莱坞原则+;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
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;
}