0Pricing
C# Academy · Pelajaran

Sumber & Penyedia Konfigurasi

Susun konfigurasi dari file JSON, variabel lingkungan, argumen baris perintah, dan penyedia kustom berdasarkan prioritas.

Sumber & Penyedia Konfigurasi adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Konfigurasi di .NET

Sistem konfigurasi ASP.NET Core membaca pengaturan dari berbagai sumber — berkas JSON, variabel lingkungan, argumen baris perintah, dan lainnya — lalu menggabungkannya menjadi satu penyimpanan pasangan kunci-nilai datar yang dapat diakses di mana pun dalam aplikasi Anda.

appsettings.json

appsettings.json adalah berkas konfigurasi bawaan. Berkas ini dimuat secara otomatis oleh Host.CreateApplicationBuilder. Pengaturan digabungkan dengan penggantian khusus lingkungan.

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

Membaca Nilai Konfigurasi

Akses konfigurasi melalui IConfiguration. Kunci menggunakan notasi titik dua untuk objek bertingkat. Array diakses berdasarkan indeks.

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

Variabel Lingkungan

Variabel lingkungan menimpa pengaturan JSON dan sangat penting untuk penerapan dalam kontainer. Garis bawah ganda (__) menggantikan pemisah titik dua pada kunci bertingkat.

# 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

Argumen Baris Perintah

Secara bawaan, argumen baris perintah memiliki prioritas tertinggi. Argumen ini menggunakan sintaks --key=value atau --key value, dengan titik dua atau garis bawah ganda untuk penyarangan.

# 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 menyimpan konfigurasi sensitif di luar direktori proyek selama pengembangan. Data ini tidak pernah dikomit ke kendali sumber dan menimpa appsettings.json secara lokal.

# 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

Penyedia Konfigurasi Kustom

Implementasikan IConfigurationProvider dan IConfigurationSource untuk memuat konfigurasi dari sumber apa pun — basis data, Consul, Vault, Redis, dan lainnya.

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

Mendaftarkan Penyedia Kustom

Tambahkan sumber konfigurasi kustom ke builder sebelum memanggil Build(). Sumber tersebut masuk ke rantai prioritas yang sama dengan penyedia bawaan.

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 memusatkan pengaturan di berbagai layanan mikro dengan flag fitur, label, dan pembuatan versi. Penyedia resminya terintegrasi sebagai sumber konfigurasi standar.

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

Memuat Ulang Konfigurasi

Beberapa penyedia mendukung deteksi perubahan. Penyedia JSON dapat memuat ulang konfigurasi saat berkas berubah. Gunakan IOptionsMonitor<T> untuk menanggapi perubahan saat program berjalan.

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

Pemeriksaan Singkat

Pemisah apa yang harus digunakan untuk merepresentasikan kunci konfigurasi JSON bertingkat sebagai variabel lingkungan?

Penerapan di Dunia Nyata: Konfigurasi dari Banyak Sumber

Penyiapan produksi yang menggabungkan appsettings, variabel lingkungan, dan User Secrets dengan urutan prioritas yang ditentukan secara eksplisit.

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

Ringkasan: Sumber & Penyedia Konfigurasi

Poin penting:

  • Konfigurasi digabungkan dari berbagai sumber; sumber yang datang kemudian menimpa sumber sebelumnya
  • Prioritas: argumen CLI > variabel lingkungan > appsettings.{env}.json > appsettings.json
  • Gunakan __ (garis bawah ganda) dalam variabel lingkungan untuk kunci bertingkat
  • User Secrets menjaga kredensial pengembangan tetap berada di luar kendali sumber
  • Penyedia kustom: implementasikan IConfigurationSource + IConfigurationProvider
  • Gunakan reloadOnChange: true + IOptionsMonitor untuk pembaruan konfigurasi langsung

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Sumber & Penyedia Konfigurasi” gratis?

Ya — teks lengkap “Sumber & Penyedia Konfigurasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Sumber & Penyedia Konfigurasi”?

Susun konfigurasi dari file JSON, variabel lingkungan, argumen baris perintah, dan penyedia kustom berdasarkan prioritas. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Sumber & Penyedia Konfigurasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Sumber & Penyedia Konfigurasi
  2. Options Bertipe Kuat dengan IOptions
  3. Validasi Options & Options Bernama
  4. Pengelolaan Rahasia
← Kembali ke C# Academy