gpt4 book ai didi

mvvm - 将服务传递给 MainViewModel - 我应该使用依赖注入(inject)容器吗?

转载 作者:行者123 更新时间:2023-12-03 10:18:43 25 4
gpt4 key购买 nike

我有这个代码:

public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);

var mainVM = new MainViewModel
(
new Service1(),
...
new Service10(),
);

var window = new MainWindow();
window.DataContext = mainVM;
window.Show();

}
}

我将所有服务实例传递给 MainViewModel。在 MainViewModel 中,我通过构造函数参数传递将这些服务传播到其他 ViewModel。

我应该为 App 类中的服务使用任何 DI 框架吗?

如果是的话,解决服务而不是仅仅手动创建实例有什么好处......?

最佳答案

您可以在容器中注册所有这些类型,并拥有 OnStartup方法制作单个Resolve称呼。

首先,有MainWindow在其构造函数中接受其 View 模型:

public MainWindow(MainViewModel viewModel)
{
DataContext = viewModel;
}

然后,注册 MainWindowMainViewModel在服务旁边的容器中。如果 MainViewModel需要其他 View 模型,将它们放入其构造函数并注册它们。

最后解决 MainWindow ,它执行所有的实例化工作:
var window = container.Resolve<MainWindow>();

window.Show();

这里的关键点是 View 模型与您在容器中注册的任何其他类没有什么不同。

这种方法的优点(来自评论):

1) 容器为您调用所有的构造函数——您只需要描述图形的每一部分,并且它会经历组装它的单调乏味。

2) MainViewModel不必知道如何构建其 subview 模型,这使它可以专注于其核心职责,而不必了解其 subview 的每一个依赖关系。

关于mvvm - 将服务传递给 MainViewModel - 我应该使用依赖注入(inject)容器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4576470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com