ASP.NET 5: So laden Sie stark typisierte Konfigurationen bei Änderungen neu
Posted: 16 Jan 2025, 11:27
Ich konnte in ASP.NET 5 eine stark typisierte Konfiguration einrichten und sie funktioniert perfekt. Ich habe die Konfiguration auch so eingestellt, dass sie automatisch neu geladen wird, wenn die .json-Konfigurationsdateien geändert werden. Dies scheint jedoch nur zu funktionieren, wenn ich die untypisierte Konfiguration verwende. Die stark typisierte Konfigurationsklasse behält weiterhin die alten Werte bei, wenn die .json-Dateien geändert werden.
Ich richte die Konfiguration wie folgt ein:
Und es so binden:
(Die Konfigurationsdateien sehen so aus:)
(Und ich habe entsprechend eine C#-Klasse wie diese:)
Wenn ich IOptions über die Abhängigkeitsinjektion erhalte, ändert es sich nicht, wenn ich config.json und config ändere. Dev.json-Dateien. Ich muss die gesamte Web-App neu starten, um die Konfigurationsklasse zu aktualisieren. Aber wenn ich stattdessen die untypisierte IConfiguration-Instanz verwende, ändert sie sich automatisch, wenn ich die JSON-Dateien ändere.
Die Frage ist also: Wie erstelle ich die stark typisierte Instanz? Konfigurationsänderung, wenn ich die .json-Datei ändere, ohne die Webanwendung neu starten zu müssen?
Ich richte die Konfiguration wie folgt ein:
Code: Select all
public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
// Setup configuration sources
var builder = new ConfigurationBuilder()
.AddJsonFile("config.json")
.AddJsonFile($"config.{env.EnvironmentName}.json");
Configuration = builder.Build()
.ReloadOnChanged("config.json")
.ReloadOnChanged($"config.{env.EnvironmentName}.json");
/* ... (unrelated stuff edited away) ... */
}
Code: Select all
public void ConfigureServices(IServiceCollection services)
{
/* ... (unrelated stuff edited away) ... */
services.AddOptions();
services.AddInstance(Configuration);
services.Configure(Configuration.GetSection("AppSettings"));
services.Configure(Configuration.GetSection("DbSettings"));
/* ... (unrelated stuff edited away) ... */
}
Code: Select all
{
"AppSettings": {
"This": "that",
"Foo": "bar"
/* etc... */
},
"DbSettings": {
/* (db settings here) */
}
}
Code: Select all
public class AppSettings
{
public string This { get; set; }
public string Foo { get; set; }
/* etc... */
}
Die Frage ist also: Wie erstelle ich die stark typisierte Instanz? Konfigurationsänderung, wenn ich die .json-Datei ändere, ohne die Webanwendung neu starten zu müssen?