將組態繫結至字典會擴充值

當使用 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