C# ASP.NET 5 MVC 6 DI:ServiceProvider未解析类型
在下面的代码中,C# ASP.NET 5 MVC 6 DI:ServiceProvider未解析类型,c#,dependency-injection,asp.net-core,asp.net-core-mvc,C#,Dependency Injection,Asp.net Core,Asp.net Core Mvc,在下面的代码中,serviceProvider.GetService()正在解析为null: public void ConfigureService(IServiceCollection services) { var serviceProvider = services.BuildServiceProvider(); services.AddSingleton<DocumentDbConnection>( x => new Document
serviceProvider.GetService()
正在解析为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));
}
public void配置服务(IServiceCollection服务)
{
var serviceProvider=services.BuildServiceProvider();
服务.AddSingleton(
x=>newdocumentdbconnection(uri,authKey));
//服务为空?
var connection=serviceProvider.GetService();
services.AddTransient(
x=>newstopRepository(连接、数据库ID、集合ID));
}
为什么会这样?该类型是在调用
GetService
之前注册的,因此它是否应该解析为单例?在注册DocumentDbConnection
之前,您正在构建服务提供程序。你应该先注册你需要的服务。然后,BuildServiceProvider
将使用在此之前注册的服务构建一个服务提供商:
services.AddSingleton<DocumentDbConnection>(x => new DocumentDbConnection(uri, authKey));
var serviceProvider = services.BuildServiceProvider();
// code using serviceProvider
services.AddSingleton(x=>newDocumentDBConnection(uri,authKey));
var serviceProvider=services.BuildServiceProvider();
//使用serviceProvider的代码