Aracılığıyla paylaş


Yapılandırma bağlayıcısı tarafından sözlüğe eklenen boş anahtarlar

Önceki sürümlerde, yapılandırma bir sözlük türüne bağlandığında, yapılandırmada karşılık gelen değerleri olmayan tüm anahtarlar atlandı ve sözlüğe eklenmiyordu. Bu anahtarlar artık atlanamayacak, bunun yerine varsayılan değerleriyle otomatik olarak oluşturulacak şekilde davranış değişti. Bu değişiklik, yapılandırmada listelenen tüm anahtarların sözlük içinde bulunmasını sağlar.

Sürüm kullanıma sunulmuştur

.NET 8 Önizleme 5

Önceki davranış

Daha önce, bir sözlük türüne bağlı olduğunda yapılandırmadaki boş anahtarlar atlanıyordu. Aşağıdaki yapılandırma dizesini ve bağlama kodunu göz önünde bulundurun.

var json = @"{
    ""Queues"": {
        ""q1"": {
            ""V"": 1
        },
        ""q2"": {
            ""V"": 2
        },
        ""q3"": {
        }
    }
}";
public class Q
{
    public Dictionary<string, QueueValue> Queues { get; set; } = new();
}

public class QueueValue
{
    public int V { get; set; }
}

var configuration = new ConfigurationBuilder()
    .AddJsonStream(StringToStream(json))
    .Build();

Q options = new Q();
configuration.Bind(options);
foreach (var kvp in options.Queues)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value.V}");
}

Daha önce aşağıdaki çıkışı görüyor olacaktınız (anahtarın q3 eksik olduğuna dikkat edin):

q1: 1
q2: 2

Yeni davranış

.NET 8'den başlayarak, yapılandırma bağlaması sırasında boş yapılandırma anahtarları varsayılan değerleriyle birlikte sözlüğe eklenir.

Önceki davranış bölümünde yer alan ve şimdi sözlüğe varsayılan değeriyle eklenen metni gösteren q3 kodu göz önünde bulundurun:

q1: 1
q2: 2
q3: 0

Kesinti yaratan değişiklik türü

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

Değişiklik nedeni

Kullanıcı tarafından istenen bu değişiklik, yapılandırmada listelenen tüm anahtarların sözlük içinde bulunmasını sağlar. Tüm anahtarların mevcut olması işlemi kolaylaştırır ve eksik anahtarlarla ilgili olası sorunları önler.

Uygulama mantığınızı doğrulayın ve yeni oluşturulan sözlük girdilerinin boş değerlerle varlığına uyum sağlayacak şekilde uyarlayabilirsiniz. Yeni davranış istenmeyen bir davranışsa, yapılandırmadan boş değer girdilerini kaldırın. Bu girdiler ortadan kaldırılarak, bağlama işlemi sırasında boş değerlere sahip sözlük girdileri eklenmez.

Etkilenen API'ler