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.

InformationsquelleAutor Marcus | 2018-01-17
Schreibe einen Kommentar