Akademi C# · Pelajaran

Sumber & Pembekal Konfigurasi

Susun konfigurasi daripada fail JSON, pemboleh ubah persekitaran, argumen baris perintah dan pembekal tersuai mengikut keutamaan.

Pelajaran 1 daripada 413 langkah

Sumber & Pembekal Konfigurasi ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Konfigurasi dalam .NET

Sistem konfigurasi ASP.NET Core membaca tetapan daripada pelbagai sumber — fail JSON, pemboleh ubah persekitaran, argumen baris perintah dan banyak lagi — kemudian menggabungkannya menjadi satu stor nilai kunci rata yang boleh dicapai dari mana-mana sahaja dalam app anda.

appsettings.json

appsettings.json ialah fail konfigurasi lalai. Fail ini dimuatkan secara automatik oleh Host.CreateApplicationBuilder. Tetapan digabungkan dengan penggantian khusus mengikut persekitaran.

// 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 bertindih untuk objek bersarang. Tatasusunan diakses menggunakan 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"];
    }
}

Pemboleh Ubah Persekitaran

Pemboleh ubah persekitaran mengatasi tetapan JSON dan amat penting untuk penerapan berasaskan kontena. Garis bawah berganda (__) menggantikan pemisah titik bertindih dalam kunci bersarang.

# 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

Argumen baris perintah mempunyai keutamaan tertinggi secara lalai. Argumen ini menggunakan sintaks --key=value atau --key value, dengan titik bertindih atau garis bawah berganda untuk struktur bersarang.

# 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

Rahsia Pengguna

Rahsia Pengguna menyimpan konfigurasi sensitif di luar direktori projek semasa pembangunan. Rahsia ini tidak pernah dihantar ke kawalan sumber dan mengatasi appsettings.json secara setempat.

# 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 Tersuai

Laksanakan IConfigurationProvider dan IConfigurationSource untuk memuatkan konfigurasi daripada mana-mana sumber — pangkalan data, Consul, Vault, Redis dan sebagainya.

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 Tersuai

Tambahkan sumber konfigurasi tersuai kepada pembina sebelum memanggil Build(). Sumber ini menjadi sebahagian daripada rantaian keutamaan yang sama seperti penyedia terbina dalam.

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 tetapan merentas perkhidmatan mikro dengan bendera ciri, label dan pemversian. Penyedia rasmi disepadukan sebagai sumber konfigurasi 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

Memuat Semula Konfigurasi

Sesetengah penyedia menyokong pengesanan perubahan. Penyedia JSON boleh memuat semula konfigurasi apabila fail berubah. Gunakan IOptionsMonitor<T> untuk bertindak balas terhadap perubahan semasa masa jalan.

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

Semakan Pantas

Pembatas apakah yang patut digunakan untuk mewakili kunci konfigurasi JSON bersarang sebagai pemboleh ubah persekitaran?

Situasi Sebenar: Konfigurasi daripada Pelbagai Sumber

Persediaan pengeluaran yang menggabungkan appsettings, pemboleh ubah persekitaran dan rahsia pengguna dengan susunan keutamaan yang jelas.

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

Perkara utama:

  • Konfigurasi digabungkan daripada pelbagai sumber; sumber yang kemudian mengatasi sumber yang terdahulu
  • Keutamaan: argumen CLI > pemboleh ubah persekitaran > appsettings.{env}.json > appsettings.json
  • Gunakan __ (garis bawah berganda) dalam pemboleh ubah persekitaran untuk kunci bersarang
  • Rahsia Pengguna memastikan kelayakan pembangunan tidak dimasukkan ke dalam kawalan sumber
  • Penyedia tersuai: laksanakan IConfigurationSource + IConfigurationProvider
  • Gunakan reloadOnChange: true + IOptionsMonitor untuk kemas kini konfigurasi secara langsung
Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Sumber & Pembekal Konfigurasi” percuma?

Ya — teks penuh “Sumber & Pembekal Konfigurasi” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Sumber & Pembekal Konfigurasi”?

Susun konfigurasi daripada fail JSON, pemboleh ubah persekitaran, argumen baris perintah dan pembekal tersuai mengikut keutamaan. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Sumber & Pembekal Konfigurasi” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Sumber & Pembekal Konfigurasi
  2. Pilihan Bertip Kukuh dengan IOptions
  3. Pengesahan Pilihan & Pilihan Bernama
  4. Pengurusan Rahsia
← Kembali ke Akademi C#