ConfigurationBinder zgłasza niezgodną wartość
Wcześniej użyto wyłącznie do zgłaszania wyjątku, jeśli wartość istniała w konfiguracji, BinderOptions.ErrorOnUnknownConfiguration ale nie w powiązanym modelu. Jeśli ta właściwość jest ustawiona na true
wartość , zgłaszany jest również wyjątek, jeśli nie można przekonwertować wartości w konfiguracji na typ wartości w modelu.
Wprowadzona wersja
.NET 8 (wersja zapoznawcza 1)
Poprzednie zachowanie
Wcześniej poniższy kod dyskretnie połykał wyjątki dla pól, które zawierały nieprawidłowe wyliczenia:
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.
}
Nowe zachowanie
Począwszy od platformy .NET 8, jeśli nie można przekonwertować wartości konfiguracji na typ wartości w modelu, InvalidOperationException jest zgłaszana wartość .
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Poprzednie zachowanie było mylące dla niektórych deweloperów. Ustawiono BinderOptions.ErrorOnUnknownConfigurationtrue
wartość i oczekiwano wyjątku, który ma zostać zgłoszony, jeśli wystąpił jakikolwiek problem, gdy konfiguracja została powiązana.
Zalecana akcja
Jeśli aplikacja ma wartości konfiguracji, których nie można przekonwertować na właściwości w modelu powiązanym, zmień lub usuń wartości.
Alternatywnie ustaw wartość BinderOptions.ErrorOnUnknownConfigurationfalse
.
Dotyczy interfejsów API
- 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>)