Aracılığıyla paylaş


Eşleşmeyen değer için ConfigurationBinder hata verir

Daha önce, BinderOptions.ErrorOnUnknownConfiguration yalnızca yapılandırmada bir değer varsa ama bağlı olan modelde yoksa özel durum oluşturmak için kullanılıyordu. Şimdi, bu özellik olarak trueayarlanırsa, yapılandırmadaki değer modeldeki değer türüne dönüştürülemiyorsa bir özel durum da oluşturulur.

Sürüm kullanıma sunulmuştur

.NET 8 Preview 1

Önceki davranış

Daha önce, aşağıdaki kod geçersiz enum değerleri içeren alanların özel durumlarını sessizce yutuyordu.

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

Yeni davranış

.NET 8'den başlayarak, bir yapılandırma değeri modeldeki değerin türüne dönüştürülemiyorsa, bir InvalidOperationException oluşturulur.

Kesinti yaratan değişiklik türü

Bu değişiklik davranışsal bir değişikliktir.

Değişiklik nedeni

Önceki davranış bazı geliştiriciler için kafa karıştırıcıydı. BinderOptions.ErrorOnUnknownConfiguration, true olarak ayarladılar ve yapılandırma bağlanırken herhangi bir sorunla karşılaşılması durumunda bir özel durumun oluşturulmasını beklediler.

Uygulamanızın ilişkili modeldeki özelliklere dönüştürülemez yapılandırma değerleri varsa, değerleri değiştirin veya kaldırın.

Alternatif olarak BinderOptions.ErrorOnUnknownConfigurationfalse ayarlayın.

Etkilenen API'ler