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.
Zalecana akcja
Jeśli nowe zachowanie nie jest zadowalające, można ręcznie manipulować wartościami wewnątrz tablicy po powiązaniu.