我有一个通用的 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 教程,无法让它工作。
任何帮助表示赞赏。
为了解决这个问题,我创建了一个小型工厂类,它接受一个参数并将其传递给 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>());