Delen via


Bindingsconfiguratie voor woordenlijst breidt waarden uit

Wanneer u een configuratie met behulp van een Dictionary<TKey,TValue> object bindt waarbij de waarde een onveranderbaar verzamelingstype is, wordt de verzameling waarden meer dan één keer uitgebreid met dezelfde sleutel in plaats van de hele verzameling te vervangen door de nieuwe waarde.

Geïntroduceerde versie

.NET 7

Vorig gedrag

Houd rekening met de volgende code waarmee een configuratie met één sleutel met een naam Key meerdere keren aan een woordenlijst wordt gekoppeld.

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

Vóór .NET 7 werd de waarde voor Key elke keer dat het werd gekoppeld overschreven. De code heeft de volgende uitvoer geproduceerd:

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

Nieuw gedrag

Vanaf .NET 7 wordt de woordenlijstwaarde steeds uitgebreid wanneer dezelfde sleutel afhankelijk is, waarbij de nieuwe waarde wordt toegevoegd, maar ook bestaande waarden in de matrix behouden blijven. Dezelfde code uit de sectie Vorig gedrag produceert de volgende uitvoer:

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

Type van brekende verandering

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Deze wijziging verbetert het bindingsgedrag doordat eerder toegevoegde waarden niet worden overschreven in matrices van woordenlijstwaarden.

Als het nieuwe gedrag niet bevredigend is, kunt u de waarden in de matrix handmatig bewerken na binding.

Betreffende API's