Comparteix a través de


Claves vacías agregadas al diccionario por enlazador de configuración

En versiones anteriores, cuando la configuración estaba enlazada a un tipo de diccionario, las claves sin valores correspondientes en la configuración se omitieron y no se agregaron al diccionario. El comportamiento ha cambiado de modo que esas claves ya no se omiten, pero en su lugar se crean automáticamente con sus valores predeterminados. Este cambio garantiza que todas las claves enumeradas en la configuración estarán presentes en el diccionario.

Versión introducida

.NET 8 (versión preliminar 5)

Comportamiento anterior

Anteriormente, las claves vacías de la configuración se omitían cuando se enlazaban a un tipo de diccionario. Tenga en cuenta la siguiente cadena de configuración y el código de enlace.

var json = @"{
    ""Queues"": {
        ""q1"": {
            ""V"": 1
        },
        ""q2"": {
            ""V"": 2
        },
        ""q3"": {
        }
    }
}";
public class Q
{
    public Dictionary<string, QueueValue> Queues { get; set; } = new();
}

public class QueueValue
{
    public int V { get; set; }
}

var configuration = new ConfigurationBuilder()
    .AddJsonStream(StringToStream(json))
    .Build();

Q options = new Q();
configuration.Bind(options);
foreach (var kvp in options.Queues)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value.V}");
}

Anteriormente, vería la siguiente salida (observe que falta la clave q3 ):

q1: 1
q2: 2

Comportamiento nuevo

A partir de .NET 8, las claves de configuración vacías se agregan al diccionario con su valor predeterminado durante el enlace de configuración.

Considere el código de la sección Comportamiento anterior, que ahora genera el siguiente texto que muestra que q3 se ha agregado al diccionario con su valor predeterminado:

q1: 1
q2: 2
q3: 0

Tipo de cambio importante

Este es un cambio de comportamiento.

Motivo del cambio

Este cambio solicitado por el usuario garantiza que todas las claves enumeradas en la configuración estén presentes en el diccionario. Tener todas las claves presentes simplifica el proceso y evita posibles problemas con las claves que faltan.

Compruebe y adapte la lógica de la aplicación para dar cabida a la presencia de las entradas del diccionario recién creadas con valores vacíos. Si el nuevo comportamiento no es deseable, quite las entradas de valor vacío de la configuración. Al eliminar estas entradas, no se agregarán entradas de diccionario con valores vacíos durante el proceso de enlace.

API afectadas