ConfigurationBinder genera un'eccezione per mancata corrispondenza di un valore

In precedenza, BinderOptions.ErrorOnUnknownConfiguration veniva usato esclusivamente per generare un'eccezione se esisteva un valore nella configurazione ma non nel modello da associare. Ora, se questa proprietà è impostata su true, viene generata un'eccezione anche se il valore nella configurazione non può essere convertito nel tipo di valore nel modello.

Versione introdotta

.NET 8 Anteprima 1

Comportamento precedente

In precedenza, il codice seguente ignorava automaticamente le eccezioni per i campi che contenevano enumerazioni non valide:

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.
}

Nuovo comportamento

A partire da .NET 8, se non è possibile convertire un valore di configurazione nel tipo del valore nel modello, viene generata un'eccezione InvalidOperationException.

Tipo di modifica di rilievo

Questa è una modifica funzionale.

Motivo della modifica

Il comportamento precedente creava confusione per alcuni sviluppatori. Impostavano BinderOptions.ErrorOnUnknownConfiguration su true e si aspettavano che venisse generata un'eccezione se veniva riscontrato un problema o quando veniva associata la configurazione.

Se l'app ha valori di configurazione che non possono essere convertiti nelle proprietà nel modello associato, cambiare o rimuovere i valori.

In alternativa, impostare BinderOptions.ErrorOnUnknownConfiguration su false.

API interessate