2016-11-07 44 views
6

Potrzebuję skonfigurować kilka zależności (usług) w metodzie ConfigureServices w aplikacji sieci web ASP.NET Core 1.0.Odczytanie AppSettings w fazie ConfigureServices w ASP.NET Core

Problem polega na tym, że na podstawie nowej konfiguracji JSON potrzebuję skonfigurować usługę lub inną.

I nie wydaje się właściwie odczytać ustawienia w ConfigureServices fazie aplikacji Żywotność:

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

musiałbym rzeczywiście przeczytać tę sekcję i zdecydować, co się rejestrować ISomething (może inny typ niż ConcreteSomething).

+2

Apostolskiej http://stackoverflow.com/q/40397648/5426333 –

+0

@ademcaglin: Dzięki! To było to. Głosowałem za zamknięciem własnego pytania jako duplikatu tego :) –

+0

Połączoną odpowiedzią jest pobranie wartości z pliku konfiguracyjnego, a nie z pliku appsettings.json. – im1dermike

Odpowiedz

1

Począwszy od ASP.NET Core 2.0, konfigurujemy konfigurację w klasie Program podczas budowania instancji WebHost. Przykładem takiej konfiguracji:

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

Między innymi ta pozwala na stosowanie konfiguracji bezpośrednio w Startup klasy, coraz wystąpienie IConfiguration poprzez wstrzyknięcie konstruktora (dziękuję, wbudowany pojemnik DI):

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

    public IConfiguration Configuration { get; } 

    ... 
} 
+0

tak! pracował dla mnie. wreszcie mogę uzyskać moje rzeczy z wpisów json, aby przygotować moje usługi: \ – AmiNadimi