2015-09-15 2 views
8

В приведенном ниже коде serviceProvider.GetService<DocumentDbConnection>() в разрешающие null:ASP.NET MVC 5 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