我是WPF应用程序的新手,我无法弄清楚为什么services.BuildServiceProvider()是null。我认为一旦执行了AppHost声明的行,ConfigureServices应该已经构建了services对象,反过来,_serviceProvider在OnStartup方法中不会为null。
public partial class App : Application
{
private readonly ServiceProvider \_serviceProvider;
public static IHost? AppHost { get; private set; }
public App()
{
ServiceCollection services = new();
AppHost = Host.CreateDefaultBuilder()
.ConfigureServices(ConfigureServices)
.Build();
**_serviceProvider = services.BuildServiceProvider();**
}
protected void ConfigureServices(HostBuilderContext context, IServiceCollection services)
{
services.AddSingleton<IMainViewModel, MainViewModel>();
services.AddSingleton<MainWindow>();
...
}
protected override async void OnStartup(StartupEventArgs e)
{
ILogger logger = _serviceProvider.GetService<ILogger>()!;
...
startupForm.Show();
base.OnStartup(e);
}
所以我的问题是,为什么我得到的服务对象为空?我知道我犯了一个错误的地方,有人能指出吗?
1条答案
按热度按时间chy5wohz1#
您不需要单独创建
ServiceCollection
对象,因为它是在创建主机时创建和初始化的。IHost
具有Services
属性,该属性包含程序的已配置服务。另外,您还必须将
_serviceProvider
的类型从Microsoft.Extensions.DependencyInjection.ServiceProvider
更改为它的抽象System.IServiceProvider
: