5

In zwei Projekten (eine .NET Core Web API und ein .NET Core WindowsService) verwende ich appsettings.json für die Konfiguration.Wie funktioniert reloadOnChange von Microsoft.Extensions.Configuration für appsettings.json

var configuration = new ConfigurationBuilder() 
      .SetBasePath(System.IO.Directory.GetCurrentDirectory()) 
      .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
      .AddEnvironmentVariables() 
      .Build(); 

In den beiden habe ich die reloadOnChange auf true gesetzt und dessen Verwendung als IOptions über Dependency Injection injiziert. Innerhalb der Web-API in die Controller-Klassen und innerhalb des Service in die Klassen, die die Einstellungen verwenden.

Leider erfahre ich, dass die Werte nicht ändern, wenn die appsettings.json ändert.

Auf der Web-API habe ich einen Controller erstellt, um nur einen String-Wert aus der Konfig zurückgeben und dies bleibt gleich wie beim Start.

Also meine Fragen:

  1. Wer weiß, ob das aus der Box funktionieren soll (zumindest in dem Web-api)?
  2. Alles, was ich tun muss, dass es funktioniert?
+0

Wie registrieren Sie Ihre Optionen? Verwenden Sie 'services.Configure (Confiugration.GetSection (...))'? oder verwenden Sie '.Bind()'? – Tseng

+0

In beiden Fällen services.Configure (Confiugration.GetSection (. ..)) – monty

+0

Normalerweise funktioniert es über Änderungstoken, die registriert sind, wenn Sie die obige Überladung aufrufen (https://github.com/aspnet/Options /blob/rel/1.1.0/src/Microsoft.Extensions.Options.ConfigurationExtensions/OptionsConfigurationServiceCollectionExtensions.cs#L35-L36) und https://github.com/aspnet/Options/blob/rel/1.1.0/src/ Microsoft.Extensions.Options.ConfigurationExtensions/ConfigureFromConfigurationOptions.cs triggert eine Rebind, wenn das Token ausgelöst wird – Tseng

Antwort

3

Angenommen, Sie verwenden .net-Core 1.1 (weil reloadOnChange nur in ASP.NET-Core 1.1 und höher unterstützt wird) ist es eigentlich IOptionsSnapshot Sie wollen (vgl Configuration in ASP.NET Core - IOptionsSnapshot) und nicht nur IOptions.

+0

habe es noch nicht funktioniert, aber ich werde es weiter versuchen – monty

+0

Das hat für mich funktioniert! Ich injiziere 'IOptions ' via Konstruktor. Durch Ändern in "IOptionsSnapshot " wird die Datei bei Änderungen aktualisiert, ohne dass die App neu gestartet werden muss. – Scott

Verwandte Themen