Udostępnij za pośrednictwem


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 truewartość , 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.

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