wpf C#不确定为什么服务为空

wpcxdonn  于 2023-03-24  发布在  C#
关注(0)|答案(1)|浏览(144)

我是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);
    }

所以我的问题是,为什么我得到的服务对象为空?我知道我犯了一个错误的地方,有人能指出吗?

chy5wohz

chy5wohz1#

您不需要单独创建ServiceCollection对象,因为它是在创建主机时创建和初始化的。
IHost具有Services属性,该属性包含程序的已配置服务。
另外,您还必须将_serviceProvider的类型从Microsoft.Extensions.DependencyInjection.ServiceProvider更改为它的抽象System.IServiceProvider

private readonly IServiceProvider _serviceProvider;

public App()
{
    AppHost = Host.CreateDefaultBuilder()
        .ConfigureServices(ConfigureServices)
        .Build();

    _serviceProvider = AppHost.Services;
}

相关问题