Dela via


Bindningskonfiguration till ordbok utökar värden

När du binder en konfiguration med ett Dictionary<TKey,TValue> objekt där värdet är en föränderlig samlingstyp utökar bindningen till samma nyckel mer än en gång nu värdesamlingen i stället för att ersätta hela samlingen med det nya värdet.

Version lanserad

.NET 7

Tidigare beteende

Tänk på följande kod som binder en konfiguration som har en enda nyckel med namnet Key till en ordlista flera gånger.

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

Före .NET 7 skrevs värdet för Key över vid varje bindning. Koden producerade följande utdata:

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

Nytt beteende

Från och med .NET 7 utökas ordlistevärdet varje gång samma nyckel är bunden, vilket lägger till det nya värdet men även behåller befintliga värden i matrisen. Samma kod från avsnittet Föregående beteende genererar följande utdata:

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

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

Den här ändringen förbättrar bindningsbeteendet genom att inte åsidosätta tidigare tillagda värden i ordlistevärdematriser.

Om det nya beteendet inte är tillfredsställande kan du ändra värdena i matrisen manuellt efter bindningen.

Berörda API:er