Compartilhar via


A configuração de associação ao dicionário estende valores

Ao associar uma configuração usando um Dictionary<TKey,TValue> objeto em que o valor é um tipo de coleção mutável, associar à mesma chave mais de uma vez agora estende a coleção de valores em vez de substituir toda a coleção pelo novo valor.

Versão introduzida

.NET 7

Comportamento anterior

Considere o código a seguir que associa uma configuração que tem uma única chave nomeada Key a um dicionário várias vezes.

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"])}");

Antes do .NET 7, o valor de Key era sobrescrito a cada associação. O código produziu a seguinte saída:

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

Novo comportamento

A partir do .NET 7, o valor do dicionário é estendido sempre que a mesma chave é associada, adicionando o novo valor, mas também mantendo todos os valores existentes na matriz. O mesmo código da seção Comportamento anterior produz a seguinte saída:

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

Tipo de mudança disruptiva

Esta é uma alteração comportamental.

Motivo da alteração

Essa alteração melhora o comportamento de associação não substituindo valores adicionados anteriormente em matrizes de valor de dicionário.

Se o novo comportamento não for satisfatório, você poderá manipular manualmente os valores dentro da matriz após a associação.

APIs afetadas