Dynamic Configuration: Kötü ve İdeal Kullanım¶
Dynamic configuration, uygulamanızın yapılandırma ayarlarını çalışma zamanında değiştirme yeteneği sağlar. Yanlış kullanılan dinamik yapılandırmalar, veri tutarsızlıklarına ve beklenmedik davranışlara yol açabilir.
1. Sabit Kodlanmış Yapılandırmalar¶
❌ Yanlış Kullanım: Yapılandırmaları sabit kodlamak.
public class AppConfig
{
public const string ConnectionString = "Server=localhost;Database=MyApp;User=admin;Password=1234;";
}
✅ İdeal Kullanım: Yapılandırmaları bir dosya veya çevresel değişkenlerde tutarak dinamik hale getirin.
appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyApp;User=admin;Password=1234;"
}
}
Kullanım:
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
2. Hassas Bilgileri Güvenli Bir Şekilde Yönetmemek¶
❌ Yanlış Kullanım: Hassas bilgileri yapılandırma dosyalarında düz metin olarak saklamak.
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyApp;User=admin;Password=1234;"
}
}
✅ İdeal Kullanım: Hassas bilgileri güvenli bir şekilde yönetmek için bir secret management aracı kullanın.
HashiCorp Vault Kullanımı:
builder.Configuration.AddVault(options =>
{
options.Address = "https://vault.example.com";
options.Token = Environment.GetEnvironmentVariable("VAULT_TOKEN");
});
Azure Key Vault Kullanımı:
builder.Configuration.AddAzureKeyVault(
new Uri("https://mykeyvault.vault.azure.net/"),
new DefaultAzureCredential()
);
3. Dinamik Yapılandırmayı İzlememek¶
❌ Yanlış Kullanım: Yapılandırma değişikliklerini izlememek.
✅ İdeal Kullanım: Dinamik yapılandırma değişikliklerini izlemek için yapılandırma sağlayıcılarını kullanın.
Azure App Configuration Örneği:
builder.Configuration.AddAzureAppConfiguration(options =>
{
options.Connect("ConnectionString")
.ConfigureRefresh(refresh =>
{
refresh.Register("AppSettings:Sentinel", refreshAll: true);
});
});
4. Performans Üzerindeki Etkileri Göz Ardı Etmek¶
❌ Yanlış Kullanım: Yapılandırmaların sürekli olarak okunması.
var setting = builder.Configuration["AppSettings:SettingKey"]; // Sürekli çağrılar
✅ İdeal Kullanım: Yapılandırmaları bir cache mekanizması ile optimize edin.
public class MyService
{
private readonly IConfiguration _configuration;
private string _cachedSetting;
public MyService(IConfiguration configuration)
{
_configuration = configuration;
_cachedSetting = _configuration["AppSettings:SettingKey"];
}
}