將組態繫結至字典會擴充值
當使用 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
中斷性變更的類型
此變更為行為變更。
變更原因
此變更不會覆寫字典值陣列中先前新增的值,從而改善了繫結行為。
建議的動作
如果新行為不令人滿意,您可以在繫結之後手動操作陣列內的值。