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.jsonArguments 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.jsonSecrets 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 onlyFournisseurs 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 refreshRecharger 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+IOptionsMonitorpour 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
- Sources et fournisseurs de configuration
- Options fortement typées avec IOptions
- Validation des options et options nommées
- Gestion des secrets