Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Auparavant, BinderOptions.ErrorOnUnknownConfiguration elle était utilisée uniquement pour déclencher une exception si une valeur existait dans la configuration, mais pas dans le modèle lié. À présent, si cette propriété est définie sur true, une exception est également levée si la valeur de la configuration ne peut pas être convertie au type de la valeur du modèle.
Version introduite
.NET 8 Préversion 1
Comportement précédent
Auparavant, le code suivant avalait silencieusement les exceptions pour les champs qui contenaient des énumérations non valides :
public enum TestSettingsEnum
{
Option1,
Option2,
}
public class MyModelContainingArray
{
public TestSettingsEnum[] Enums { get; set; }
}
public void SilentlySwallowsInvalidItems()
{
var dictionary = new Dictionary<string, string>
{
["Section:Enums:0"] = "Option1",
["Section:Enums:1"] = "Option3", // invalid - ignored
["Section:Enums:2"] = "Option4", // invalid - ignored
["Section:Enums:3"] = "Option2",
};
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddInMemoryCollection(dictionary);
var config = configurationBuilder.Build();
var configSection = config.GetSection("Section");
var model = configSection.Get<MyModelContainingArray>(o => o.ErrorOnUnknownConfiguration = true);
// Only Option1 and Option2 are in the bound collection at this point.
}
Nouveau comportement
À compter de .NET 8, si une valeur de configuration ne peut pas être convertie en type de la valeur dans le modèle, une InvalidOperationException est levée.
Type de changement cassant
Ce changement est un changement de comportement.
Raison de la modification
Le comportement précédent était déroutant pour certains développeurs. Ils définissaient BinderOptions.ErrorOnUnknownConfiguration sur true et s’attendaient à ce qu’une exception soit levée si un problème était rencontré lorsque la configuration était liée.
Action recommandée
Si votre application a des valeurs de configuration qui ne peuvent pas être converties en propriétés dans le modèle lié, modifiez ou supprimez les valeurs.
Vous pouvez également définir BinderOptions.ErrorOnUnknownConfiguration à false.
API affectées
- Microsoft.Extensions.Configuration.ConfigurationBinder.Bind(IConfiguration, Object, Action<BinderOptions>)
- Microsoft.Extensions.Configuration.ConfigurationBinder.Get<T>(IConfiguration, Action<BinderOptions>)
- Microsoft.Extensions.Configuration.ConfigurationBinder.Get(IConfiguration, Type, Action<BinderOptions>)