ASP.. NET 5 MVC 6 DI: ServiceProvider没有解析类型

本文关键字:类型 ServiceProvider NET MVC DI ASP | 更新日期: 2023-09-27 18:12:44

在下面的代码中,serviceProvider.GetService<DocumentDbConnection>()解析为null:

public void ConfigureService(IServiceCollection services)
{
    var serviceProvider = services.BuildServiceProvider();
    services.AddSingleton<DocumentDbConnection>(
        x => new DocumentDbConnection(uri, authKey));
    // service is null?
    var connection = serviceProvider.GetService<DocumentDbConnection>();
    services.AddTransient<IStopRepository, StopRepository>(
        x => new StopRepository(connection, databaseId, collectionId));
}

为什么会发生这种情况?类型是在GetService被调用之前注册的,所以它不应该解析为单例吗?

ASP.. NET 5 MVC 6 DI: ServiceProvider没有解析类型

在注册DocumentDbConnection之前,您正在构建服务提供者。您应该首先注册您需要的服务。然后BuildServiceProvider将使用在此之前注册的服务构建一个服务提供者:

services.AddSingleton<DocumentDbConnection>(x => new DocumentDbConnection(uri, authKey));
var serviceProvider = services.BuildServiceProvider();
// code using serviceProvider