다음을 통해 공유


구성을 딕셔너리에 바인딩하면 값이 확장됩니다

값이 변경 가능한 컬렉션 형식인 개체를 사용하여 Dictionary<TKey,TValue> 구성을 바인딩하는 경우 동일한 키에 두 번 이상 바인딩하면 전체 컬렉션을 새 값으로 바꾸는 대신 값 컬렉션이 확장됩니다.

도입된 버전

.NET 7

이전 동작

다음 코드는 Key라는 단일 키를 가진 구성을 여러 번 사전에 바인딩하는 것을 보여줍니다.

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

.NET 7 이전에는 각 바인딩마다 Key 값이 덮어씌워졌습니다. 이 코드는 다음 출력을 생성했습니다.

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

새 동작

.NET 7부터는 동일한 키가 바인딩할 때마다 사전 값이 확장되어 새 값이 추가되고 배열에 기존 값도 유지됩니다. 이전 동작 섹션의 동일한 코드는 다음 출력을 생성합니다.

Initially: InitialValue
Bind: InitialValue, NewValue
Bind again: InitialValue, NewValue, NewValue

파괴적 변경 유형

이 변경 사항은 행동 변화입니다.

변경 이유

이렇게 변경하면 사전 값 배열에서 이전에 추가된 값을 재정의하지 않음으로써 바인딩 동작이 향상됩니다.

새 동작이 만족스럽지 않은 경우 바인딩 후 배열 내의 값을 수동으로 조작할 수 있습니다.

영향을 받는 API