0Pricing
C# Academy · Leçon

Sources et fournisseurs de configuration

Combinez la configuration provenant de fichiers JSON, de variables d’environnement, d’arguments de ligne de commande et de fournisseurs personnalisés en respectant les priorités.

Sources et fournisseurs de configuration est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Configuration dans .NET

Le système de configuration d’ASP.NET Core lit les paramètres depuis plusieurs sources — des fichiers JSON, des variables d’environnement, des arguments de ligne de commande, etc. — puis les fusionne en un seul magasin plat de paires clé-valeur, accessible partout dans votre application.

appsettings.json

appsettings.json est le fichier de configuration par défaut. Il est chargé automatiquement par Host.CreateApplicationBuilder. Les paramètres sont fusionnés avec les remplacements propres à l’environnement.

// 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;..."
  }
}

Lecture des valeurs de configuration

Accédez à la configuration via IConfiguration. Les clés utilisent la notation avec des deux-points pour les objets imbriqués. Les tableaux sont accessibles par index.

// 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"];
    }
}

Variables d’environnement

Les variables d’environnement remplacent les paramètres JSON et sont essentielles pour les déploiements conteneurisés. Les doubles traits de soulignement (__) remplacent les séparateurs deux-points dans les clés imbriquées.

# 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

Arguments de ligne de commande

Par défaut, les arguments de ligne de commande ont la priorité la plus élevée. Ils utilisent la syntaxe --key=value ou --key value, avec des deux-points ou des doubles traits de soulignement pour l’imbrication.

# 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

Secrets utilisateur

Les secrets utilisateur stockent les paramètres sensibles en dehors du répertoire du projet pendant le développement. Ils ne sont jamais ajoutés au contrôle du code source et remplacent localement 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

Fournisseurs de configuration personnalisés

Implémentez IConfigurationProvider et IConfigurationSource pour charger la configuration depuis n’importe quelle source — base de données, Consul, Vault, Redis, etc.

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);
}

Enregistrer un fournisseur personnalisé

Ajoutez une source de configuration personnalisée au générateur avant d’appeler Build(). Elle s’insère dans la même chaîne de priorités que les fournisseurs intégrés.

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 centralise les paramètres entre les microservices grâce aux indicateurs de fonctionnalité, aux étiquettes et à la gestion des versions. Le fournisseur officiel s’intègre comme une source de configuration standard.

// 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

Recharger la configuration

Certains fournisseurs prennent en charge la détection des changements. Le fournisseur JSON peut recharger la configuration lorsque le fichier est modifié. Utilisez IOptionsMonitor<T> pour réagir aux changements lors de l’exécution.

// 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!"));
    }
}

Vérification rapide

Quel séparateur devez-vous utiliser pour représenter les clés de configuration JSON imbriquées sous forme de variables d’environnement ?

En pratique : configuration provenant de plusieurs sources

Une configuration de production combinant appsettings, les variables d’environnement et les secrets utilisateur, avec un ordre de priorité explicite.

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"]!;

Récapitulatif : sources et fournisseurs de configuration

Points clés à retenir :

  • La configuration est fusionnée depuis plusieurs sources : les sources ultérieures remplacent les précédentes
  • Priorité : arguments CLI > variables d’environnement > appsettings.{env}.json > appsettings.json
  • Utilisez __ (double trait de soulignement) dans les variables d’environnement pour les clés imbriquées
  • Les secrets utilisateur gardent les identifiants de développement en dehors du contrôle du code source
  • Fournisseurs personnalisés : implémentez IConfigurationSource + IConfigurationProvider
  • Utilisez reloadOnChange: true + IOptionsMonitor pour mettre à jour la configuration en temps réel

Questions Fréquemment Posées

La leçon « Sources et fournisseurs de configuration » est-elle gratuite ?

Oui — le texte complet de « Sources et fournisseurs de configuration » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Sources et fournisseurs de configuration » ?

Combinez la configuration provenant de fichiers JSON, de variables d’environnement, d’arguments de ligne de commande et de fournisseurs personnalisés en respectant les priorités. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Sources et fournisseurs de configuration » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Sources et fournisseurs de configuration
  2. Options fortement typées avec IOptions
  3. Validation des options et options nommées
  4. Gestion des secrets
← Retour à C# Academy