【发布时间】:2021-05-09 10:37:18
【问题描述】:
谁能给我一些建议。我正在使用
Microsoft.Extensions.DependencyInjection 版本 5.0.1 nuget 包
并且我想获得对需要对其进行服务注入的 ViewModel 类的引用,同时将参数传递给 ViewModel。这里我有一个例子,其中
我的班级调用 ViewModel 也需要向其传递参数。谁能告诉我怎么做?
public class ThemeManagementPage : HeadingView
{
private readonly ThemeManagementViewModel _vm;
public ThemeManagementPage(int param1)
{
// This page is called with a parameter and then
// whhat I need to do is to pass the parameter `param1`
// to the ViewModel which I have identified
// as a Transient (see bottom of post)
BindingContext = _vm =
Startup.ServiceProvider.GetRequiredService<ThemeManagementViewModel>();
}
}
public partial class ThemeManagementViewModel : BaseViewModel
{
private readonly IResourceService _resourceService;
public ThemeManagementViewModel(IResourceService resourceService, int param1)
{
_resourceService = resourceService;
var x = param1
}
}
以下是我的 DI 设置供参考:
public partial class ResourceService : IResourceService
{
private IDatabaseService _databaseService;
public ResourceService(IDatabaseService databaseService)
{
_databaseService = databaseService;
}
}
public interface IResourceService
{
void SetResourceColors();
}
public static class Startup
{
public static IServiceProvider ServiceProvider { get; set; }
public static IServiceProvider Init()
{
var serviceProvider = new ServiceCollection().ConfigureServices()
.BuildServiceProvider();
ServiceProvider = serviceProvider;
return serviceProvider;
}
}
public static class DependencyInjectionContainer
{
public static IServiceCollection ConfigureServices(this IServiceCollection services)
{
services.AddSingleton<IDatabaseService, DatabaseService>();
services.AddSingleton<IResourceService, ResourceService>();
services.AddTransient<ThemeManagementViewModel>();
return services;
}
}
【问题讨论】:
-
当页面被调用时,一个参数被传递给它。因此,例如,可能会将 Id 传递到显示汽车信息的页面。然后我想为该页面创建一个 ViewModel 并需要将 Id 值传递给该视图模型。 Ranjit 提到刚刚做 _vm.Param1 = 10 但我不确定这是否是正确的方法。在我开始使用 DI 之前,我只是在做 _vm = new ThemeManagementViewModel(Id);但现在有了 DI,我不能 100% 确定如何正确地做到这一点。
标签: c# .net xamarin xamarin.forms dependency-injection