2015-09-15 10 views
8

を解決しないserviceProvider.GetService<DocumentDbConnection>()nullに解決される:ASP.NET 5 MVC 6 DI:のServiceProviderは、以下のコードでタイプ

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が呼ばれる前に登録されていますので、シングルトンに解決しないといけませんか?

答えて

11

サービスプロバイダを構築する前にDocumentDbConnectionを登録してください。必要なサービスを最初に登録する必要があります。その後BuildServiceProviderは、それまで登録されたサービスとサービスプロバイダを構築します:

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

// code using serviceProvider 
+1

を私は何とかこれを見落とし - ありがとう:) – davenewza

関連する問題