Teclas vazias adicionadas ao dicionário pelo fichário de configuração
Nas versões anteriores, quando a configuração era vinculada a um tipo de dicionário, todas as chaves sem valores correspondentes na configuração eram ignoradas e não eram adicionadas ao dicionário. O comportamento foi alterado de tal forma que essas chaves não são mais ignoradas, mas criadas automaticamente com seus valores padrão. Essa alteração garante que todas as chaves listadas na configuração estarão presentes no dicionário.
Versão introduzida
.NET 8 Visualização 5
Comportamento anterior
Anteriormente, as teclas vazias na configuração eram ignoradas quando vinculadas a um tipo de dicionário. Considere a seguinte cadeia de caracteres de configuração e código de ligaçã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 chave q3
está faltando):
q1: 1
q2: 2
Novo comportamento
A partir do .NET 8, chaves de configuração vazias são adicionadas ao dicionário com seu valor padrão durante a vinculação de configuração.
Considere o código da seção de comportamento anterior, que agora gera o seguinte texto mostrando que q3
foi adicionado ao dicionário com seu valor padrão:
q1: 1
q2: 2
q3: 0
Tipo de mudança de rutura
Esta mudança é uma mudança comportamental.
Razão para a 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.
Ação recomendada
Verifique e adapte a lógica do 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 valor vazio da configuração. Ao eliminar essas entradas, nenhuma entrada de dicionário com valores vazios será adicionada durante o processo de vinculação.