2015-09-15 2 views
8

In dem folgenden Code, serviceProvider.GetService<DocumentDbConnection>() wird die Lösung auf null:ASP.NET MVC 5 6 DI: Serviceprovider nicht Typ Lösung

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

Warum ist das passiert? Der Typ wird registriert, bevor GetService aufgerufen wird, sollte es also nicht zum Singleton aufgelöst werden?

Antwort

11

Sie bauen den Service Provider vor Sie registrieren die DocumentDbConnection. Sie sollten zuerst die Dienste registrieren, die Sie benötigen. Dann wird BuildServiceProvider einen Dienstanbieter mit den bis dahin registrierten Diensten aufbauen:

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

// code using serviceProvider 
+1

habe ich irgendwie übersehen - danke :) – davenewza