Condividi tramite


L'associazione della configurazione al dizionario estende i valori

Quando si associa una configurazione usando un Dictionary<TKey,TValue> oggetto in cui il valore è un tipo di raccolta modificabile, l'associazione alla stessa chiave estende più volte l'insieme values anziché sostituire l'intera raccolta con il nuovo valore.

Versione introdotta

.NET 7

Comportamento precedente

Si consideri il codice seguente che associa una configurazione con una singola chiave denominata Key a un dizionario più volte.

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

Prima di .NET 7, il valore per Key veniva sovrascritto a ogni associazione. Il codice ha prodotto l'output seguente:

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

Nuovo comportamento

A partire da .NET 7, il valore del dizionario viene esteso ogni volta che viene associata la stessa chiave, aggiungendo il nuovo valore ma mantenendo anche tutti i valori esistenti nella matrice. Lo stesso codice della sezione Comportamento precedente produce l'output seguente:

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

Tipo di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

Questa modifica migliora il comportamento di associazione non eseguendo l'override dei valori aggiunti in precedenza nelle matrici di valori del dizionario.

Se il nuovo comportamento non è soddisfacente, è possibile modificare manualmente i valori all'interno della matrice dopo l'associazione.

Le API interessate