Freigeben über


Leere Schlüssel, die dem Wörterbuch durch Konfigurationsordner hinzugefügt werden

In früheren Versionen wurden beim Binden der Konfiguration an einen Wörterbuchtyp alle Schlüssel ohne entsprechende Werte in der Konfiguration übersprungen und dem Wörterbuch nicht hinzugefügt. Das Verhalten hat sich so geändert, dass diese Schlüssel nicht mehr übersprungen, sondern stattdessen automatisch mit ihren Standardwerten erstellt werden. Durch diese Änderung wird sichergestellt, dass alle in der Konfiguration aufgeführten Schlüssel im Wörterbuch vorhanden sind.

Eingeführt in Version

.NET 8 Vorschauversion 5

Vorheriges Verhalten

Zuvor wurden leere Schlüssel beim Binden der Konfiguration an einen Wörterbuchtyp übersprungen. Sehen Sie sich die folgende Konfigurationszeichenfolge und den Bindungscode an.

var json = @"{
    ""Queues"": {
        ""q1"": {
            ""V"": 1
        },
        ""q2"": {
            ""V"": 2
        },
        ""q3"": {
        }
    }
}";
public class Q
{
    public Dictionary<string, QueueValue> Queues { get; set; } = new();
}

public class QueueValue
{
    public int V { get; set; }
}

var configuration = new ConfigurationBuilder()
    .AddJsonStream(StringToStream(json))
    .Build();

Q options = new Q();
configuration.Bind(options);
foreach (var kvp in options.Queues)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value.V}");
}

Zuvor wurde die folgende Ausgabe angezeigt (beachten Sie, dass der Schlüssel q3 fehlt):

q1: 1
q2: 2

Neues Verhalten

Ab .NET 8 werden leere Konfigurationsschlüssel während der Konfigurationsbindung mit ihrem Standardwert zum Wörterbuch hinzugefügt.

Betrachten Sie den Code aus dem vorigen Abschnitt über das Verhalten, der nun den folgenden Text ausgibt, der zeigt, dass q3 mit seinem Standardwert zum Wörterbuch hinzugefügt wurde:

q1: 1
q2: 2
q3: 0

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Diese vom Benutzer angeforderte Änderung stellt sicher, dass alle in der Konfiguration aufgeführten Schlüssel im Wörterbuch vorhanden sind. Das Vorhandensein aller Schlüssel vereinfacht den Prozess und vermeidet mögliche Probleme mit fehlenden Schlüsseln.

Überprüfen Sie Ihre Anwendungslogik und passen Sie sie an, um das Vorhandensein der neu erstellten Wörterbucheinträge mit leeren Werten zu berücksichtigen. Wenn das neue Verhalten unerwünscht ist, entfernen Sie Einträge mit leeren Werten aus der Konfiguration. Durch die Eliminierung dieser Einträge werden während des Bindungsvorgangs keine Wörterbucheinträge mit leeren Werten hinzugefügt.

Betroffene APIs