Bagikan melalui


Mengikat konfigurasi ke kamus memperluas nilai

Saat mengikat konfigurasi menggunakan Dictionary<TKey,TValue> objek di mana nilai adalah jenis koleksi yang dapat diubah, mengikat ke kunci yang sama lebih dari sekali sekarang memperluas koleksi nilai alih-alih mengganti seluruh koleksi dengan nilai baru.

Versi yang diperkenalkan

.NET 7

Perilaku sebelumnya

Pertimbangkan kode berikut yang mengikat konfigurasi yang memiliki satu kunci bernama Key ke kamus beberapa kali.

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

Sebelum .NET 7, nilai untuk Key ditimpa satu setiap ikatan. Kode menghasilkan output berikut:

Initially: InitialValue
Bind: NewValue
Bind again: NewValue

Perilaku baru

Mulai dari .NET 7, nilai kamus diperpanjang setiap kali kunci yang sama terikat, menambahkan nilai baru tetapi juga menyimpan nilai yang ada dalam array. Kode yang sama dari bagian Perilaku sebelumnya menghasilkan output berikut:

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

Jenis perubahan yang memutus kompatibilitas

Perubahan ini adalah perubahan perilaku .

Alasan perubahan

Perubahan ini meningkatkan perilaku pengikatan dengan tidak mengesampingkan nilai yang ditambahkan sebelumnya dalam array nilai kamus.

Jika perilaku baru tidak memuaskan, Anda dapat memanipulasi nilai secara manual di dalam array setelah pengikatan.

API yang terpengaruh

  • Metode "ConfigurationBinder"