Freigeben über


Binden einer Konfiguration an ein Wörterbuch erweitert Werte

Beim Binden einer Konfiguration mit einem Dictionary<TKey,TValue> Objekt, bei dem der Wert ein veränderbarer Auflistungstyp ist, wird die Bindung an denselben Schlüssel mehrmals erweitert, anstatt die gesamte Auflistung durch den neuen Wert zu ersetzen.

Eingeführte Version

.NET 7

Vorheriges Verhalten

Betrachten Sie den folgenden Code, der eine Konfiguration mit einem einzelnen Schlüssel namens Key mehrfach an ein Wörterbuch bindet.

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

Vor .NET 7 wurde der Wert für Key bei jedem Bindungsvorgang überschrieben. Der Code hat die folgende Ausgabe erstellt:

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

Neues Verhalten

Ab .NET 7 wird der Wörterbuchwert bei jeder Bindung desselben Schlüssels erweitert, wobei der neue Wert hinzugefügt wird, aber auch vorhandene Werte im Array beibehalten werden. Der gleiche Code aus dem Abschnitt "Vorheriges Verhalten " erzeugt die folgende Ausgabe:

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

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für Änderung

Diese Änderung verbessert das Bindungsverhalten, indem zuvor hinzugefügte Werte in Wörterbuchwertarrays nicht überschrieben werden.

Wenn das neue Verhalten nicht zufriedenstellend ist, können Sie die Werte innerhalb des Arrays nach der Bindung manuell bearbeiten.

Betroffene APIs