Sumber & Pembekal Konfigurasi
Susun konfigurasi daripada fail JSON, pemboleh ubah persekitaran, argumen baris perintah dan pembekal tersuai mengikut keutamaan.
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.jsonArgumen 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.jsonRahsia 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 onlyPenyedia 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 refreshMemuat 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+IOptionsMonitoruntuk kemas kini konfigurasi secara langsung
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
- Sumber & Pembekal Konfigurasi
- Pilihan Bertip Kukuh dengan IOptions
- Pengesahan Pilihan & Pilihan Bernama
- Pengurusan Rahsia