Udostępnij za pośrednictwem


Konfiguracja powiązania ze słownika rozszerza wartości

W przypadku powiązania konfiguracji przy użyciu Dictionary<TKey,TValue> obiektu, w którym wartość jest modyfikowalnym typem kolekcji, powiązanie z tym samym kluczem więcej niż raz rozszerza teraz kolekcję wartości zamiast zastępowania całej kolekcji nową wartością.

Wprowadzona wersja

.NET 7

Poprzednie zachowanie

Rozważmy następujący kod, który wiąże konfigurację, która ma jeden klucz o nazwie Key do słownika wiele razy.

using Microsoft.Extensions.Configuration;

IConfiguration config = new ConfigurationBuilder()
    .AddInMemoryCollection()
    .Build();

config["Key:0"] = "NewValue";
var dict = new Dictionary<string, string[]>() { { "Key", new[] { "InitialValue" } } };

Console.WriteLine($"Initially: {String.Join(", ", dict["Key"])}");
config.Bind(dict);
Console.WriteLine($"Bind: {String.Join(", ", dict["Key"])}");
config.Bind(dict);
Console.WriteLine($"Bind again: {String.Join(", ", dict["Key"])}");

Przed platformą .NET 7 wartość została Key zastąpiona jednym powiązaniem. Kod wygenerował następujące dane wyjściowe:

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

Nowe zachowanie

Począwszy od platformy .NET 7, wartość słownika jest rozszerzana za każdym razem, gdy ten sam klucz jest powiązany, dodając nową wartość, ale także zachowując wszystkie istniejące wartości w tablicy. Ten sam kod z poprzedniej sekcji zachowania generuje następujące dane wyjściowe:

Initially: InitialValue
Bind: InitialValue, NewValue
Bind again: InitialValue, NewValue, NewValue

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Ta zmiana poprawia zachowanie powiązania, nie przesłaniając wcześniej dodanych wartości w tablicach wartości słownika.

Jeśli nowe zachowanie nie jest zadowalające, można ręcznie manipulować wartościami wewnątrz tablicy po powiązaniu.

Dotyczy interfejsów API