Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При привязке конфигурации с помощью Dictionary<TKey,TValue> объекта, в котором значение является мутируемым типом коллекции, привязка к одному ключу несколько раз расширяет коллекцию значений вместо замены всей коллекции новым значением.
Представленная версия
.NET 7
Предыдущее поведение
Рассмотрим следующий код, который привязывает конфигурацию с одним ключом с именем Key к словарю несколько раз.
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"])}");
До .NET 7 значение для Key при каждой привязке было перезаписано. Код создал следующие выходные данные:
Initially: InitialValue
Bind: NewValue
Bind again: NewValue
Новое поведение
Начиная с .NET 7 значение словаря расширяется каждый раз при привязке одного и того же ключа, добавляя новое значение, а также сохраняя все существующие значения в массиве. Тот же код из раздела "Предыдущее поведение " создает следующие выходные данные:
Initially: InitialValue
Bind: InitialValue, NewValue
Bind again: InitialValue, NewValue, NewValue
Тип разрушающего изменения
Причина изменения
Это изменение улучшает поведение привязки, не переопределяя ранее добавленные значения в массивах значений словаря.
Рекомендуемое действие
Если новое поведение не является удовлетворительным, вы можете вручную управлять значениями внутри массива после привязки.