Configuración de enlace al diccionario amplía los valores
Cuando se enlaza una configuración mediante un objeto Dictionary<TKey,TValue> 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"])}");
Anteriormente a .NET 7, el valor de Key
se sobrescribía en cada enlace. El código ha generado la siguiente salida:
Initially: InitialValue
Bind: NewValue
Bind again: NewValue
Comportamiento nuevo
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 produce el siguiente resultado:
Initially: InitialValue
Bind: InitialValue, NewValue
Bind again: InitialValue, NewValue, NewValue
Tipo de cambio importante
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.
API afectadas
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de