WPF MVVM的UserControls依赖注入

3

我正在使用MVVM模式开发一个WPF .Net Core 5应用程序,并尝试使用依赖注入来学习新的知识。

我刚刚按照以下方式修改了App.xaml.cs类,在初始登录后,我可以正常访问MainWindow:

       public partial class App : Application
        {
            private readonly ServiceProvider _serviceProvider;
    
            public App()
            {
                ServiceCollection services = new ServiceCollection();
                ConfigureServices(services);
                _serviceProvider = services.BuildServiceProvider();
            }
    
            private void ConfigureServices(ServiceCollection services)
            {
                services.AddTransient<frmSQLConnection>();
                services.AddTransient<frmLogin>();
                services.AddSingleton<MainWindow>();
            }
    
            protected override void OnStartup(StartupEventArgs e)
            {
                if ((SuccessfullyConnected || _serviceProvider.GetService<frmSQLConnection>().ShowDialog() == true) && _serviceProvider.GetService<frmLogin>().ShowDialog() == true)
                {
                    _serviceProvider.GetService<MainWindow>().Show();
                }
                else
                {
                    Shutdown();
                }
            }
}

我的疑问现在出现了,因为MainWindow.xaml将由顶部的RibbonMenu和紧挨着下面的TabControl组成,就像这个例子一样:输入图片描述 我的问题是对于UserControls,什么是好的依赖注入实现方式?我读过一些关于Composite Application的文章,但它似乎更适用于嵌套的UserControls而不是我的情况。
有什么建议吗?
提前感谢您的帮助。
1个回答

0
如果您遵循 MVVM 模式,那么您将为每个用户控件设置 ViewModel,并在构造函数或方法体中使用 DI 来注入所需的“服务”。然后,您可以使用类似 PRISM(MVVM 框架)的东西来触发其他 ViewModel 可以订阅的事件。它还提供了 MVVM 应用程序内导航的机制。
编辑: 您还可以考虑使用“shell”视图,然后在其中使用用户控件。这将使您能够在“shell”视图内部交换/导航到不同的用户控件。这些控件可以拥有自己的视图模型和全局事件等。
PRISM 资源:https://prismlibrary.com/docs/index.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接