2016-11-07 6 views
6

Мне нужно настроить несколько зависимостей (услуг) в методе ConfigureServices в веб-приложении ASP.NET Core 1.0.На самом деле читать AppSettings в фазе ConfigureServices в ASP.NET Core

Проблема в том, что на основе новой конфигурации JSON мне необходимо настроить службу.

Я не могу на самом деле читать настройки в ConfigureServices фазе приложения жизни:

public void ConfigureServices(IServiceCollection services) 
{ 
    var section = Configuration.GetSection("MySettings"); // this does not actually hold the settings 
    services.Configure<MySettingsClass>(section); // this is a setup instruction, I can't actually get a MySettingsClass instance with the settings 
    // ... 
    // set up services 
    services.AddSingleton(typeof(ISomething), typeof(ConcreteSomething)); 
} 

я должен был бы фактически прочитать этот раздел и решить, что для регистрации ISomething (может быть другой тип чем ConcreteSomething).

+2

Престола http://stackoverflow.com/q/40397648/5426333 –

+0

@ademcaglin: Спасибо! Вот и все. Я проголосовал за то, что закрыл свой вопрос как дубликат этого: –

+0

Связанный ответ - получить значения из файла конфигурации, а не файла appsettings.json. – im1dermike

ответ

1

Начиная с ASP.NET Core 2.0 мы выполняем настройку конфигурации в классе Program при создании экземпляра WebHost. Пример такой установки:

return new WebHostBuilder() 
    .UseKestrel() 
    .UseContentRoot(Directory.GetCurrentDirectory()) 
    .ConfigureAppConfiguration((builderContext, config) => 
    { 
     IHostingEnvironment env = builderContext.HostingEnvironment; 

     config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); 
    }) 

Среди прочего, это позволяет использовать конфигурацию непосредственно в Startup класса, получение экземпляра IConfiguration с помощью инъекции конструктора (спасибо, встроенный в DI контейнер):

public class Startup 
{ 
    public Startup(IConfiguration configuration) 
    { 
     Configuration = configuration; 
    } 

    public IConfiguration Configuration { get; } 

    ... 
} 
+0

Да! работал на меня. наконец, я могу получить свои материалы из json-записей, чтобы подготовить мои услуги: \ – AmiNadimi