다음을 통해 공유


구성 바인더에 의해 사전에 빈 키가 추가됨

이전 버전에서는 구성이 사전 형식에 바인딩되면 구성에 해당 값이 없는 키는 건너뛰고 사전에 추가되지 않았습니다. 해당 키를 더 이상 건너뛰지 않고 대신 기본값을 사용하여 자동으로 만들어지도록 동작이 변경되었습니다. 이렇게 변경하면 구성에 나열된 모든 키가 사전 내에 존재하게 됩니다.

도입된 버전

.NET 8 미리 보기 5

이전 동작

이전에는 사전 형식에 바인딩될 때 구성의 빈 키를 건너뛰었습니다. 다음 구성 문자열과 바인딩 코드를 고려합니다.

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}");
}

이전에는 다음과 같은 출력이 표시되었습니다(q3 키가 누락됨).

q1: 1
q2: 2

새 동작

.NET 8부터 구성 바인딩 중에 빈 구성 키가 기본값으로 사전에 추가됩니다.

이제 q3이 기본값으로 사전에 추가되었음을 보여 주는 다음 텍스트를 출력하는 이전 동작 섹션의 코드를 살펴봅니다.

q1: 1
q2: 2
q3: 0

호환성이 손상되는 변경의 형식

이 변경 사항은 동작 변경입니다.

변경 이유

이 사용자 요청 변경으로 인해 구성에 나열된 모든 키가 사전 내에 존재하게 됩니다. 모든 키가 있으면 프로세스가 간소화되고 키 누락으로 인한 잠재적인 문제가 방지됩니다.

빈 값으로 새로 만들어진 사전 항목의 존재를 수용하도록 애플리케이션 논리를 확인하고 조정합니다. 새로운 동작이 바람직하지 않은 경우 구성에서 빈 값 항목을 제거합니다. 이러한 항목을 제거하면 바인딩 프로세스 중에 빈 값이 있는 사전 항목이 추가되지 않습니다.

영향을 받는 API