Chaves vazias adicionadas ao dicionário pelo associador de configurações

Nas versões anteriores, quando a configuração era associada a um tipo de dicionário, as chaves sem valores correspondentes na configuração eram ignoradas e não eram adicionadas ao dicionário. O comportamento foi alterado de modo que essas chaves não são mais ignoradas, mas criadas automaticamente com seus valores padrão. Isso garante que todas as chaves listadas na configuração estarão presentes no dicionário.

Versão introduzida

.NET 8 versão prévia 5

Comportamento anterior

Anteriormente, as chaves vazias na configuração eram ignoradas quando associadas a um tipo de dicionário. Considere a seguinte cadeia de caracteres de configuração e o código de associação.

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, você veria a seguinte saída (observe que a tecla q3 está ausente):

q1: 1
q2: 2

Novo comportamento

A partir do .NET 8, as chaves de configuração vazias são adicionadas ao dicionário com seu valor padrão durante a associação da configuração.

Considere o código da seção comportamento anterior, que agora exibe o seguinte texto, mostrando que q3 foi adicionado ao dicionário com seu valor padrão:

q1: 1
q2: 2
q3: 0

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

Essa alteração solicitada pelo usuário garante que todas as chaves listadas na configuração estejam presentes no dicionário. Ter todas as chaves presentes agiliza o processo e evita possíveis problemas com chaves ausentes.

Verifique e adapte a logica do seu aplicativo para acomodar a presença das entradas de dicionário recém-criadas com valores vazios. Se o novo comportamento for indesejável, remova as entradas de valores vazios da configuração. Ao eliminar essas entradas, nenhuma entrada de dicionário com valores vazios será adicionada durante o processo de associação.

APIs afetadas