Zusammenführen appsettings mit Umgebungsvariablen in .NET Core
Läuft bei mir ein .NETTO-Kern-app im Andockfenster (in Kubernetes), die environment-Variablen, um die Docker-container und mit Ihnen in meiner app.
In meine .NET-Core-app habe ich die folgende C# - Klasse:
public class EnvironmentConfiguration
{
public string EXAMPLE_SETTING { get; set; }
public string MY_SETTING_2 { get; set; }
}
Und ich meine setup - appsettings
als solche:
config.
AddJsonFile("appsettings.json").
AddJsonFile($"appsettings.docker.json", true).
AddEnvironmentVariables();
DI-setup:
services.Configure<EnvironmentConfiguration>(Configuration);
Und in meinen Controller benutze ich es als solche:
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/my")]
public class MyController : Controller
{
private readonly IOptions<EnvironmentConfiguration> _environmentConfiguration;
public MyController(IOptions<EnvironmentConfiguration> environmentConfiguration)
{
_environmentConfiguration = environmentConfiguration;
}
}
Ich laufen docker:
docker run -p 4000:5000 --env-file=myvariables
Die Datei myvariables
sieht wie folgt aus:
EXAMPLE_SETTING=example!!!
MY_SETTING_2=my-setting-2!!!!
Dieser funktioniert. Ich kann mit meinem _environmentConfiguration
und sehen, dass meine Variablen gesetzt sind.
Aber... ich würde gerne Zusammenführen von environment-Variablen mit appsettings so, dass die Werte aus den appsettings verwendet werden, als fallback, wenn die environment-Variablen werden nicht gefunden. Irgendwie verschmelzen diese beiden Zeilen:
services.Configure<EnvironmentConfiguration>(settings => Configuration.GetSection("EnvironmentConfiguration").Bind(settings));
services.Configure<EnvironmentConfiguration>(Configuration);
Ist das irgendwie möglich?
Meine fallback-plan ist es, zu Erben von der EnvironmentConfiguration
Klasse und verwenden Sie eine separate DI zwei separate Konfigurationen injiziert und dann verschmelzen Sie "manuell" im code, aber diese Lösung ist nicht wünschenswert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ist eigentlich genug, um zu überschreiben, appsettings-Werte mit Umgebungsvariablen.
Lassen Sie uns sagen, Sie haben das folgende in deiner appsettings.json-Datei;
können Sie überschreiben den Wert
Logging.Level
durch die Einstellung der Umwelt vairable "Logging:Level" auf einen anderen Wert.Sich bewusst sein, dass
:
wird verwendet, um anzugeben, verschachtelte Eigenschaften in der Umwelt der variable Schlüssel.Beachten Sie auch: von docs;
config.AddEnvironmentVariables().AddJsonFile("appsettings.json").AddJsonFile($"appsettings.docker.json", true);
würde Wertvorstellungen inappsettings.docker.json
Vorrang vor den Werten in den anderen beiden Quellen, da hieß es letzten?AddEnvironmentVariables()
als der Letzte Anruf, oder es funktioniert nicht!!!