Robust .NET applications жасағанда жақсы practices-тің бірі - configuration-ды startup кезінде validate ету. Бұл critical parameters, мысалы feature flags, appsettings.json ішінен жоғалып кеткен жағдайларды болдырмауға көмектеседі: merge conflict немесе accidental deletion кейін.
Егер value жоқ болса, app бәрібір start жасап, silently defaults қолдануы мүмкін, мысалы bool үшін false. Hidden әрі hard-to-trace production bugs осылай пайда болады. Оның орнына fail-fast approach таңдаған дұрыс: configuration invalid болса, app start жасаудан бас тартуы керек.
Problem example
{
"FeatureManagement": {
//"NewDashboard": true // Missing parameter will default to false
}
}
Бұл жағдайда app NewDashboard = false болып start жасайды, тіпті сіз true күткен болсаңыз да.
1-қадам - Configuration class анықтау
Configuration section көрсететін class жасаңыз, мысалы FeaturesConfig.
public class FeaturesConfig
{
public bool NewDashboard { get; set; }
}
Мұның өзі жеткіліксіз, өйткені key жоқ кезде
NewDashboarddefaultfalseболады.
2-қадам - Validation attributes қосу
Required fields белгілеу үшін standard DataAnnotations қолданыңыз. Binder “missing” және “false” мәндерін ажырата алуы үшін property nullable болсын.
using System.ComponentModel.DataAnnotations;
public class FeaturesConfig
{
[Required]
public bool? NewDashboard { get; set; }
}
3-қадам - Startup кезінде validation қосу
Program.cs ішінде options тіркегенде .ValidateDataAnnotations() және .ValidateOnStart() қосыңыз.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOptions<FeaturesConfig>()
.Bind(builder.Configuration.GetSection(nameof(FeaturesConfig)))
.ValidateDataAnnotations()
.ValidateOnStart();
var app = builder.Build();
app.Run();
Ескерту:
.ValidateOnStart().NET 6 ішінде енгізілді. Ол app startup кезінде options validate етеді және required fields жоқ болса,OptionsValidationExceptionтастайды.
Бұл configuration problem-ді бірден көрсетіп, system-ді production ішіндегі unpredictable behavior-дан қорғайды.

Бұл simple mechanism stable және predictable applications жасау жолындағы маңызды қадам.