2015-09-15 15 views
8

Nel codice qui sotto, serviceProvider.GetService<DocumentDbConnection>() sta risolvendo a null:ASP.NET MVC 5 6 DI: ServiceProvider non risolvendo tipo

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

Perché succede questo? Il tipo viene registrato prima che venga chiamato GetService, quindi non dovrebbe risolversi nel singleton?

risposta

11

Si sta creando il fornitore di servizi prima dello si registra lo DocumentDbConnection. Dovresti prima registrare i servizi che ti servono. Quindi BuildServiceProvider creerà un fornitore di servizi con i servizi registrati fino a quel momento:

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

// code using serviceProvider 
+1

In qualche modo ho trascurato questo - grazie :) – davenewza

Problemi correlati