Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ą.
Wersja wprowadzona
.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ść dla Key była nadpisywana przy każdym powiązaniu. 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 przełamującej
Ta zmiana jest zmianą behawioralną.
Przyczyna 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.