依赖注入使用具有不同参数的同一服务添加多个引用

问题描述 投票:0回答:1

我有一个通用的 View/ViewModel,它在其中显示不同的 View/ViewModel。我正在尝试使用依赖注入来实现这一点,但我很难弄清楚这一点。

这就是我需要使用工厂方法替换的内容。

        services.AddScoped<ViewModels.Administrator.Editor_Small_ViewModel>(x => new ViewModels.Administrator.Editor_Small_ViewModel(x.GetService<ButtonEditor_ViewModel>()!));
        services.AddScoped<ViewModels.Administrator.Editor_Small_ViewModel>(x => new ViewModels.Administrator.Editor_Small_ViewModel(x.GetService<ProductEditor_ViewModel>()!));

因此,Editor_Small_ViewModel 是父 VM,它将根据用户选择(通过 Editor_Small_ViewModel 的构造函数传入)显示以太 ButtonEditor_ViewModel 或 ProductEditor_ViewModel。

我尝试过使用工厂方法,但按照我发现的 Blazor 教程,无法让它工作。

任何帮助表示赞赏。

c# wpf dependency-injection
1个回答
0
投票

为了解决这个问题,我创建了一个小型工厂类,它接受一个参数并将其传递给 Editor_Small_ViewModel 的新实例,后者又显示它。

public class EditorFactory
    {
        public Editor_Small_ViewModel Create(AViewModel parameter) => new Editor_Small_ViewModel(parameter);
    }

添加服务。

services.AddScoped<ViewModels.Administrator.ButtonEditor_ViewModel>();
services.AddScoped<ViewModels.Administrator.ProductEditor_ViewModel>();
services.AddSingleton<EditorFactory>();

要使用,请获取服务。

        _EditorFactory = _serviceProvider.GetRequiredService<EditorFactory>();

然后当用户按下按钮时,调用工厂的create函数,传入ButtonEditor_ViewModel或ProductEditor_View

Current_ViewModel = _EditorFactory.Create(_serviceProvider.GetRequiredService<ButtonEditor_ViewModel>());

或者

Current_ViewModel = _EditorFactory.Create(_serviceProvider.GetRequiredService<ProductEditor_ViewModel>());
© www.soinside.com 2019 - 2024. All rights reserved.