0Pricing
C# Academy · Lektion

Konfigurationsquellen und -anbieter

Schichten Sie Konfigurationen aus JSON-Dateien, Umgebungsvariablen, Befehlszeilenargumenten und benutzerdefinierten Anbietern mit Prioritäten.

Konfigurationsquellen und -anbieter ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Konfiguration in .NET

Das Konfigurationssystem von ASP.NET Core liest Einstellungen aus mehreren Quellen – JSON-Dateien, Umgebungsvariablen, Befehlszeilenargumenten und weiteren – und führt sie zu einem flachen Schlüssel-Wert-Speicher zusammen, auf den überall in Ihrer Anwendung zugegriffen werden kann.

appsettings.json

appsettings.json ist die standardmäßige Konfigurationsdatei. Sie wird automatisch von Host.CreateApplicationBuilder geladen. Die Einstellungen werden mit umgebungsspezifischen Überschreibungen zusammengeführt.

// appsettings.json
{
  "App": {
    "Name": "OrderService",
    "MaxRetries": 3
  },
  "ConnectionStrings": {
    "Default": "Server=localhost;Database=orders"
  }
}

// appsettings.Production.json overrides the above:
{
  "ConnectionStrings": {
    "Default": "Server=prod-db;Database=orders;..."
  }
}

Konfigurationswerte lesen

Greifen Sie über IConfiguration auf die Konfiguration zu. Für verschachtelte Objekte verwenden Schlüssel die Doppelpunkt-Notation. Auf Arrays wird über den Index zugegriffen.

// Inject IConfiguration
public class OrderService
{
    private readonly IConfiguration _config;

    public OrderService(IConfiguration cfg) => _config = cfg;

    public void Configure()
    {
        string? name     = _config["App:Name"];           // "OrderService"
        int maxRetries   = _config.GetValue<int>("App:MaxRetries"); // 3
        string? connStr  = _config.GetConnectionString("Default");

        // Nested section
        var section = _config.GetSection("App");
        string? appName = section["Name"];
    }
}

Umgebungsvariablen

Umgebungsvariablen überschreiben JSON-Einstellungen und sind für containerisierte Bereitstellungen unverzichtbar. Doppelte Unterstriche (__) ersetzen in verschachtelten Schlüsseln die Trennzeichen aus Doppelpunkten.

# Set via shell or docker-compose:
export App__Name="OrderService-Prod"
export App__MaxRetries=5
export ConnectionStrings__Default="Server=prod-db;..."

// Equivalent to:
{
  "App": { "Name": "OrderService-Prod", "MaxRetries": 5 },
  "ConnectionStrings": { "Default": "Server=prod-db;..." }
}

// Priority: env vars > appsettings.{Environment}.json > appsettings.json

Befehlszeilenargumente

Befehlszeilenargumente haben standardmäßig die höchste Priorität. Sie verwenden die Syntax --key=value oder --key value; für Verschachtelungen können Doppelpunkte oder doppelte Unterstriche verwendet werden.

# Override config when launching the app:
dotnet run --App:Name="CLI-Override" --App:MaxRetries=10

# Or:
dotnet run --App__Name="CLI-Override"

// The builder.Configuration.AddCommandLine() is called
// automatically by Host.CreateApplicationBuilder().

// Priority order (highest to lowest):
// 1. Command-line args
// 2. Environment variables
// 3. appsettings.{ASPNETCORE_ENVIRONMENT}.json
// 4. appsettings.json

User Secrets

User Secrets speichern während der Entwicklung sensible Konfigurationsdaten außerhalb des Projektverzeichnisses. Sie werden niemals in die Quellcodeverwaltung übernommen und überschreiben lokal appsettings.json.

# Initialize user secrets for the project:
dotnet user-secrets init

# Set a secret:
dotnet user-secrets set "Database:Password" "SuperSecret123"
dotnet user-secrets set "Jwt:SecretKey" "dev-only-key"

# List secrets:
dotnet user-secrets list

# Remove:
dotnet user-secrets remove "Database:Password"

# Stored in: ~/.microsoft/usersecrets/{projectId}/secrets.json
# Automatically loaded in Development environment only

Eigene Konfigurationsanbieter

Implementieren Sie IConfigurationProvider und IConfigurationSource, um Konfigurationsdaten aus beliebigen Quellen zu laden – etwa aus einer Datenbank, Consul, Vault oder Redis.

public class DbConfigProvider : ConfigurationProvider
{
    private readonly string _connStr;
    public DbConfigProvider(string connStr) => _connStr = connStr;

    public override void Load()
    {
        using var conn = new NpgsqlConnection(_connStr);
        conn.Open();
        using var cmd = new NpgsqlCommand(
            "SELECT key, value FROM app_config", conn);
        using var reader = cmd.ExecuteReader();
        while (reader.Read())
            Data[reader.GetString(0)] = reader.GetString(1);
    }
}

public class DbConfigSource : IConfigurationSource
{
    private readonly string _connStr;
    public DbConfigSource(string connStr) => _connStr = connStr;
    public IConfigurationProvider Build(IConfigurationBuilder b)
        => new DbConfigProvider(_connStr);
}

Einen eigenen Provider registrieren

Fügen Sie dem Builder eine eigene Konfigurationsquelle hinzu, bevor Sie Build() aufrufen. Sie wird in dieselbe Prioritätskette wie die integrierten Provider eingeordnet.

var builder = Host.CreateApplicationBuilder(args);

// Add custom DB config provider after appsettings.json
builder.Configuration.Add(
    new DbConfigSource(
        builder.Configuration.GetConnectionString("Default")!));

// Or as an extension method:
public static class ConfigExtensions
{
    public static IConfigurationBuilder AddDatabaseConfig(
        this IConfigurationBuilder b, string connStr)
        => b.Add(new DbConfigSource(connStr));
}

// Usage:
builder.Configuration.AddDatabaseConfig(connStr);

Azure App Configuration

Azure App Configuration zentralisiert Einstellungen über mehrere Microservices hinweg und unterstützt Feature Flags, Labels und Versionierung. Der offizielle Provider wird als standardmäßige Konfigurationsquelle integriert.

// dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
// dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore

builder.Configuration.AddAzureAppConfiguration(options =>
    options
        .Connect(builder.Configuration["AzureAppConfig:ConnectionString"])
        .Select(KeyFilter.Any)                 // all keys
        .Select(KeyFilter.Any, "Production")   // label override
        .UseFeatureFlags(ff =>
            ff.CacheExpirationInterval = TimeSpan.FromMinutes(5))
        .ConfigureRefresh(r =>
            r.Register("App:Version", refreshAll: true)
             .SetCacheExpiration(TimeSpan.FromMinutes(1)))
);

app.UseAzureAppConfiguration(); // enable dynamic refresh

Konfiguration neu laden

Einige Provider unterstützen die Änderungserkennung. Der JSON-Provider kann die Konfiguration neu laden, wenn sich die Datei ändert. Verwenden Sie IOptionsMonitor<T>, um zur Laufzeit auf Änderungen zu reagieren.

// Enable JSON file reload on change:
builder.Configuration.AddJsonFile("appsettings.json",
    optional: false, reloadOnChange: true);

// In a service, use IOptionsMonitor (not IOptions) to get live values:
public class FeatureService
{
    private readonly IOptionsMonitor<FeatureFlags> _monitor;

    public FeatureService(IOptionsMonitor<FeatureFlags> m) => _monitor = m;

    public bool IsBetaEnabled
        => _monitor.CurrentValue.BetaEnabled; // always fresh

    // React to changes:
    public FeatureService(IOptionsMonitor<FeatureFlags> m)
    {
        _monitor = m;
        m.OnChange(flags => Console.WriteLine("Config changed!"));
    }
}

Schnelltest

Welches Trennzeichen sollten Sie verwenden, um verschachtelte JSON-Konfigurationsschlüssel als Umgebungsvariablen darzustellen?

Praxisbeispiel: Konfiguration aus mehreren Quellen

Eine Produktionskonfiguration, die appsettings, Umgebungsvariablen und User Secrets mit einer explizit festgelegten Prioritätsreihenfolge kombiniert.

var builder = Host.CreateApplicationBuilder(args);

// Default: appsettings.json → appsettings.{env}.json → env vars → CLI
// Add user secrets in development:
if (builder.Environment.IsDevelopment())
    builder.Configuration.AddUserSecrets<Program>();

// Optionally add Azure Key Vault in production:
if (!builder.Environment.IsDevelopment())
{
    var keyVaultUri = builder.Configuration["Azure:KeyVaultUri"]!;
    builder.Configuration.AddAzureKeyVault(
        new Uri(keyVaultUri), new DefaultAzureCredential());
}

// Now all secrets are available transparently via IConfiguration
var jwtKey = builder.Configuration["Jwt:SecretKey"]!;

Zusammenfassung: Konfigurationsquellen und Provider

Wichtige Erkenntnisse:

  • Die Konfiguration wird aus mehreren Quellen zusammengeführt; spätere Quellen überschreiben frühere
  • Priorität: CLI-Argumente > Umgebungsvariablen > appsettings.{env}.json > appsettings.json
  • Verwenden Sie __ (doppelter Unterstrich) in Umgebungsvariablen für verschachtelte Schlüssel
  • User Secrets halten Anmeldedaten der Entwicklung aus der Quellcodeverwaltung heraus
  • Eigene Provider: Implementieren Sie IConfigurationSource + IConfigurationProvider
  • Verwenden Sie reloadOnChange: true + IOptionsMonitor für dynamische Konfigurationsaktualisierungen

Häufig gestellte Fragen

Ist die Lektion „Konfigurationsquellen und -anbieter“ kostenlos?

Ja — der vollständige Text von „Konfigurationsquellen und -anbieter“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Konfigurationsquellen und -anbieter“?

Schichten Sie Konfigurationen aus JSON-Dateien, Umgebungsvariablen, Befehlszeilenargumenten und benutzerdefinierten Anbietern mit Prioritäten. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Konfigurationsquellen und -anbieter“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Konfigurationsquellen und -anbieter
  2. Typsichere Optionen mit IOptions
  3. Optionsvalidierung und benannte Optionen
  4. Geheimnisverwaltung
← Zurück zu C# Academy