C# Academy · Aula

Fontes e provedores de configuração

Combine configurações de arquivos JSON, variáveis de ambiente, argumentos de linha de comando e provedores personalizados, com prioridade.

Aula 1 de 413 etapas

Fontes e provedores de configuração é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Configuração no .NET

O sistema de configuração do ASP.NET Core lê configurações de várias fontes — arquivos JSON, variáveis de ambiente, argumentos de linha de comando, entre outras — e as mescla em um único armazenamento plano de chave-valor, acessível em qualquer parte do seu aplicativo.

appsettings.json

appsettings.json é o arquivo de configuração padrão. Ele é carregado automaticamente por Host.CreateApplicationBuilder. As configurações são mescladas com substituições específicas do ambiente.

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

Leitura de valores de configuração

Acesse a configuração por meio de IConfiguration. As chaves usam a notação com dois-pontos para objetos aninhados. As matrizes são acessadas por índice.

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

Variáveis de ambiente

As variáveis de ambiente substituem as configurações JSON e são essenciais para implantações em contêineres. Dois sublinhados (__) substituem os separadores de dois-pontos em chaves aninhadas.

# 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

Argumentos de linha de comando

Por padrão, os argumentos de linha de comando têm a maior prioridade. Eles usam a sintaxe --key=value ou --key value, com dois-pontos ou dois sublinhados para indicar aninhamento.

# 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

Segredos do usuário

Os Segredos do usuário armazenam configurações confidenciais fora do diretório do projeto durante o desenvolvimento. Eles nunca são enviados ao controle de código-fonte e substituem localmente o 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

Provedores de configuração personalizados

Implemente IConfigurationProvider e IConfigurationSource para carregar configurações de qualquer fonte — banco de dados, 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);
}

Registro de um provedor personalizado

Adicione uma fonte de configuração personalizada ao construtor antes de chamar Build(). Ela se encaixa na mesma cadeia de prioridades dos provedores integrados.

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

O Azure App Configuration centraliza configurações entre microsserviços com sinalizadores de funcionalidade, rótulos e controle de versões. O provedor oficial é integrado como uma fonte de configuração padrão.

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

Recarregamento da configuração

Alguns provedores são compatíveis com a detecção de alterações. O provedor JSON pode recarregar os dados quando o arquivo é alterado. Use IOptionsMonitor<T> para reagir às alterações durante a execução.

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

Verificação rápida

Qual delimitador você deve usar para representar chaves aninhadas de configuração JSON como variáveis de ambiente?

Exemplo do mundo real: configuração de várias fontes

Uma configuração de produção que combina appsettings, variáveis de ambiente e segredos do usuário, com uma ordem de prioridade explícita.

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

Recapitulação: fontes e provedores de configuração

Principais conclusões:

  • A configuração é mesclada a partir de várias fontes; as fontes posteriores substituem as anteriores
  • Prioridade: argumentos da CLI > variáveis de ambiente > appsettings.{env}.json > appsettings.json
  • Use __ (dois sublinhados) nas variáveis de ambiente para chaves aninhadas
  • Os Segredos do usuário mantêm as credenciais de desenvolvimento fora do controle de código-fonte
  • Provedores personalizados: implemente IConfigurationSource + IConfigurationProvider
  • Use reloadOnChange: true + IOptionsMonitor para atualizações de configuração em tempo real
Grátis para começar

Aprenda C# com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
93
Aulas
346

Perguntas Frequentes

A aula “Fontes e provedores de configuração” é grátis?

Sim — o texto completo de “Fontes e provedores de configuração” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Fontes e provedores de configuração”?

Combine configurações de arquivos JSON, variáveis de ambiente, argumentos de linha de comando e provedores personalizados, com prioridade. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Fontes e provedores de configuração”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fontes e provedores de configuração
  2. Options fortemente tipadas com IOptions
  3. Validação de Options e Options nomeadas
  4. Gerenciamento de segredos
← Voltar para C# Academy