Prázdné řetězce v zřetězených konfiguracích přepisují dřívější poskytovatele.

Počínaje rozhraním .NET 11 se na konfiguraci přidanou pomocí AddConfiguration pohlíží tak, že prázdný řetězec představuje existující hodnotu. Prázdný řetězec proto přepíše hodnoty od zprostředkovatelů registrovaných dříve ve vnější konfiguraci místo toho, aby tyto dřívější hodnoty zůstaly účinné.

Tato změna zachovává rozlišení mezi prázdnými a null nulovými konfiguračními hodnotami zavedené v .NET 10 v článku Hodnoty null zachované v konfiguraci. Zpracování null zřetězenými konfiguracemi zůstává beze změny.

Verze byla představena

.NET 11 RC 1

Předchozí chování

ChainedConfigurationProvider.TryGet ohlásil, že prázdný řetězec nebyl nalezen. V důsledku toho prázdná hodnota v zřetězené konfiguraci nepřepsala hodnotu zadanou dřívějším poskytovatelem:

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;

IConfiguration inner = new ConfigurationBuilder()
    .AddInMemoryCollection(new Dictionary<string, string?>
    {
        ["Endpoint"] = "",
    })
    .Build();

IConfiguration configuration = new ConfigurationBuilder()
    .AddInMemoryCollection(new Dictionary<string, string?>
    {
        ["Endpoint"] = "https://example.com",
    })
    .AddConfiguration(inner)
    .Build();

Console.WriteLine($"Endpoint: '{configuration["Endpoint"]}'");

Před .NET 11 byl výstup následující:

Endpoint: 'https://example.com'

Pokud neexistovala žádná dřívější hodnota, přečtení klíče vrátilo null a oddíl, jehož jedinou hodnotou byl zřetězený prázdný řetězec, byl považován za neexistující.

Nové chování

Od verze .NET 11 ChainedConfigurationProvider.TryGet hlásí prázdný řetězec jako nalezený. V předchozím příkladu prázdná hodnota z inner přepíše předchozí hodnotu a výstup je:

Endpoint: ''

Oddíl, jehož hodnota je prázdný řetězec, je nyní považován za existující. Vazba také zohledňuje prázdnou hodnotu místo hodnoty dřívějšího zprostředkovatele. Například vazba prázdného řetězce na dřívější číselnou hodnotu na celočíselnou vlastnost vyvolá InvalidOperationException, v souladu s prázdnou hodnotou zadanou přímo přidaným zprostředkovatelem.

Hodnota null v obaleném IConfiguration bude nadále považována za chybějící, protože indexer IConfiguration nemůže rozlišit klíč, jehož hodnota je null, od chybějícího klíče.

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

Prázdný řetězec je platná hodnota konfigurace. Považování za chybějící způsobilo, že řetězená konfigurace byla nekonzistentní s přímo přidanými zprostředkovateli konfigurace a zabránilo aplikacím úmyslně vymazat nebo zakázat nastavení jeho přepsáním prázdným řetězcem. Nové chování zachovává rozlišení poskytovatele konfigurace mezi prázdnou hodnotou a chybějící hodnotou. Další informace najdete v dokumentu dotnet/runtime#131480.

Pokud je prázdný řetězec určen k přepsání dřívější hodnoty, nevyžaduje se žádná akce.

Pokud vaše aplikace ve zřetězené konfiguraci spoléhala na prázdný řetězec, který umožnil, aby měla přednost hodnota dřívějšího poskytovatele, odeberte tento klíč ze zřetězené konfigurace nebo ho reprezentujte jako chybějící nebo null. Aplikace, které vážou řetězené hodnoty na neřetězcové typy, by také měly před vazbou ověřit nebo normalizovat prázdné hodnoty, pokud prázdná hodnota není pro cílový typ platná. Neexistuje žádný přepínač kompatibility pro obnovení předchozího chování.

Ovlivněná rozhraní API