Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando se enlaza una configuración mediante un Dictionary<TKey,TValue> objeto en el que el valor es un tipo de colección mutable, el enlace a la misma clave más de una vez amplía la colección de valores en lugar de reemplazar toda la colección por el nuevo valor.
Versión introducida
.NET 7
Comportamiento anterior
Tenga en cuenta el código siguiente que enlaza una configuración que tiene una sola clave denominada Key a un diccionario varias veces.
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 de .NET 7, el valor de Key se sobrescribía cada vez que se realizaba un enlace. El código generó la siguiente salida:
Initially: InitialValue
Bind: NewValue
Bind again: NewValue
Nuevo comportamiento
A partir de .NET 7, el valor del diccionario se extiende cada vez que se enlaza la misma clave, agregando el nuevo valor, pero manteniendo también los valores existentes en la matriz. El mismo código de la sección Comportamiento anterior genera la siguiente salida:
Initially: InitialValue
Bind: InitialValue, NewValue
Bind again: InitialValue, NewValue, NewValue
Tipo de cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
Este cambio mejora el comportamiento de enlace al no invalidar los valores agregados previamente en matrices de valores de diccionario.
Acción recomendada
Si el nuevo comportamiento no es satisfactorio, puede manipular manualmente los valores dentro de la matriz después del enlace.