Konstruktory konfiguracji dla platformy ASP.NET
Autor: Stephen Molloy i Rick Anderson
Konstruktory konfiguracji udostępniają nowoczesny i zwinny mechanizm dla aplikacji ASP.NET w celu uzyskania wartości konfiguracji ze źródeł zewnętrznych.
Konstruktory konfiguracji:
- Są dostępne w wersji .NET Framework 4.7.1 lub nowszej.
- Zapewnienie elastycznego mechanizmu odczytywania wartości konfiguracji.
- Sprostanie niektórym podstawowym potrzebom aplikacji podczas przechodzenia do środowiska skoncentrowanego na kontenerze i chmurze.
- Może służyć do poprawy ochrony danych konfiguracji przez pobieranie ze źródeł wcześniej niedostępnych (na przykład zmiennych środowiskowych i Key Vault platformy Azure) w systemie konfiguracji platformy .NET.
Konstruktory konfiguracji klucza/wartości
Typowym scenariuszem, który można obsłużyć przez konstruktorów konfiguracji, jest zapewnienie podstawowego mechanizmu wymiany klucza/wartości dla sekcji konfiguracji, które są zgodne ze wzorcem klucza/wartości. Koncepcja .NET Framework configurationBuilders nie jest ograniczona do określonych sekcji lub wzorców konfiguracji. Jednak wiele konstruktorów konfiguracji w Microsoft.Configuration.ConfigurationBuilders
programie (github, NuGet) działa w ramach wzorca klucza/wartości.
Ustawienia konstruktorów konfiguracji klucza/wartości
Następujące ustawienia mają zastosowanie do wszystkich konstruktorów konfiguracji klucza/wartości w programie Microsoft.Configuration.ConfigurationBuilders
.
Mode
Konstruktory konfiguracji używają zewnętrznego źródła informacji o klucz/wartość, aby wypełnić wybrane elementy klucza/wartości systemu konfiguracji. W szczególności <appSettings/>
sekcje i <connectionStrings/>
otrzymują specjalne traktowanie od konstruktorów konfiguracji. Konstruktorzy działają w trzech trybach:
Strict
- Tryb domyślny. W tym trybie konstruktor konfiguracji działa tylko w dobrze znanych sekcjach konfiguracji opartych na kluczu/wartościach.Strict
tryb wylicza każdy klucz w sekcji. Jeśli w źródle zewnętrznym znajduje się pasujący klucz:- Konstruktory konfiguracji zastępują wartość w wynikowej sekcji konfiguracji wartością ze źródła zewnętrznego.
Greedy
- Ten tryb jest ściśle związany z trybemStrict
. Zamiast ograniczać się do kluczy, które już istnieją w oryginalnej konfiguracji:- Konstruktory konfiguracji dodają wszystkie pary klucz/wartość ze źródła zewnętrznego do wynikowej sekcji konfiguracji.
Expand
— Działa na nieprzetworzonym pliku XML, zanim zostanie przeanalizowany w obiekcie sekcji konfiguracji. Można go traktować jako rozszerzenie tokenów w ciągu. Każda część nieprzetworzonego ciągu XML zgodnego ze wzorcem${token}
jest kandydatem do rozszerzenia tokenu. Jeśli nie znaleziono odpowiedniej wartości w źródle zewnętrznym, token nie zostanie zmieniony. Konstruktory w tym trybie nie są ograniczone do<appSettings/>
sekcji i<connectionStrings/>
.
Następujące znaczniki z web.config włącza program EnvironmentConfigBuilder w Strict
trybie:
<configuration>
<configSections>
<section name="configBuilders"
type="System.Configuration.ConfigurationBuildersSection,
System.Configuration, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
restartOnExternalChanges="false" requirePermission="false" />
</configSections>
<configBuilders>
<builders>
<add name="MyEnvironment"
type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Environment,
Version=1.0.0.0, Culture=neutral" />
</builders>
</configBuilders>
<appSettings configBuilders="MyEnvironment">
<add key="ServiceID" value="ServiceID value from web.config" />
<add key="ServiceKey" value="ServiceKey value from web.config" />
</appSettings>
<connectionStrings configBuilders="MyEnvironment">
<add name="default" connectionString="Data Source=web.config/mydb.db" />
</connectionStrings>
Poniższy kod odczytuje element <appSettings/>
i <connectionStrings/>
pokazany w poprzednim pliku web.config :
using System;
using System.Configuration;
using System.Web.UI;
namespace MyConfigBuilders
{
public partial class About : Page
{
public string ServiceID { get; set; }
public string ServiceKey { get; set; }
public string ConString { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
ServiceID = ConfigurationManager.AppSettings["ServiceID"];
ServiceKey = ConfigurationManager.AppSettings["ServiceKey"];
ConString = ConfigurationManager.ConnectionStrings["default"]
?.ConnectionString;
}
}
}
Powyższy kod ustawi wartości właściwości na:
- Wartości w pliku web.config , jeśli klucze nie są ustawione w zmiennych środowiskowych.
- Wartości zmiennej środowiskowej, jeśli są ustawione.
Na przykład ServiceID
będzie zawierać:
- "Wartość ServiceID z web.config", jeśli zmienna środowiskowa
ServiceID
nie jest ustawiona. - Wartość zmiennej środowiskowej
ServiceID
, jeśli zostanie ustawiona.
Na poniższej ilustracji przedstawiono <appSettings/>
klucze/wartości z poprzedniego pliku web.config ustawionego w edytorze środowiska:
Uwaga: może być konieczne zamknięcie i ponowne uruchomienie programu Visual Studio w celu wyświetlenia zmian w zmiennych środowiskowych.
Obsługa prefiksów
Prefiksy kluczy mogą uprościć ustawianie kluczy, ponieważ:
- Konfiguracja .NET Framework jest złożona i zagnieżdżona.
- Zewnętrzne źródła kluczy/wartości są często podstawowe i płaskie z natury. Na przykład zmienne środowiskowe nie są zagnieżdżone.
Użyj dowolnego z poniższych metod, aby wstrzyknąć zarówno do konfiguracji, jak <appSettings/>
i <connectionStrings/>
za pomocą zmiennych środowiskowych:
EnvironmentConfigBuilder
W trybie domyślnymStrict
i odpowiednie nazwy kluczy w pliku konfiguracji. Powyższy kod i znaczniki są takie podejście. Korzystając z tego podejścia , nie można mieć identycznych nazwanych kluczy w obu i<appSettings/>
<connectionStrings/>
.- Użyj dwóch
EnvironmentConfigBuilder
s wGreedy
trybie z odrębnymi prefiksami istripPrefix
. Dzięki temu podejściu aplikacja może odczytywać<appSettings/>
i<connectionStrings/>
bez konieczności aktualizowania pliku konfiguracji. W następnej sekcji stripPrefix pokazano, jak to zrobić. - Użyj dwóch
EnvironmentConfigBuilder
s wGreedy
trybie z odrębnymi prefiksami. Dzięki temu podejściu nie można mieć zduplikowanych nazw kluczy, ponieważ nazwy kluczy muszą się różnić od prefiksu. Przykład:
<configuration>
<configSections>
<section name="configBuilders"
type="System.Configuration.ConfigurationBuildersSection,
System.Configuration, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
restartOnExternalChanges="false" requirePermission="false" />
</configSections>
<configBuilders>
<builders>
<add name="AS_Environment" mode="Greedy" prefix="AppSetting_"
type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Environment" />
<add name="CS_Environment" mode="Greedy" prefix="ConnStr_"
type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Environment" />
</builders>
</configBuilders>
<appSettings configBuilders="AS_Environment">
<add key="AppSetting_ServiceID" value="ServiceID value from web.config" />
<add key="AppSetting_default" value="AppSetting_default value from web.config" />
</appSettings>
<connectionStrings configBuilders="CS_Environment">
<add name="ConnStr_default" connectionString="Data Source=web.config/mydb.db" />
</connectionStrings>
W przypadku powyższego znaczników można użyć tego samego prostego źródła klucza/wartości, aby wypełnić konfigurację dla dwóch różnych sekcji.
Na poniższej ilustracji przedstawiono <appSettings/>
klucze/wartości i <connectionStrings/>
z poprzedniego pliku web.config ustawionego w edytorze środowiska:
Poniższy kod odczytuje <appSettings/>
klucze/wartości i <connectionStrings/>
zawarte w poprzednim pliku web.config :
public partial class Contact : Page
{
public string ServiceID { get; set; }
public string AppSetting_default { get; set; }
public string ConString { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
ServiceID = ConfigurationManager.AppSettings["AppSetting_ServiceID"];
AppSetting_default = ConfigurationManager.AppSettings["AppSetting_default"];
ConString = ConfigurationManager.ConnectionStrings["ConnStr_default"]
?.ConnectionString;
}
}
Powyższy kod ustawi wartości właściwości na:
- Wartości w pliku web.config , jeśli klucze nie są ustawione w zmiennych środowiskowych.
- Wartości zmiennej środowiskowej, jeśli są ustawione.
Na przykład przy użyciu poprzedniego pliku web.config klucze/wartości w poprzednim obrazie edytora środowiska i poprzedniego kodu są ustawione następujące wartości:
Klucz | Wartość |
---|---|
AppSetting_ServiceID | AppSetting_ServiceID ze zmiennych env |
AppSetting_default | AppSetting_default wartość z env |
ConnStr_default | ConnStr_default val from env |
stripPrefix
stripPrefix
: wartość logiczna, wartość domyślna to false
.
Powyższy znacznik XML oddziela ustawienia aplikacji od parametrów połączenia, ale wymaga wszystkich kluczy w pliku web.config , aby użyć określonego prefiksu. Na przykład prefiks AppSetting
musi zostać dodany do ServiceID
klucza ("AppSetting_ServiceID"). W programie stripPrefix
prefiks nie jest używany w pliku web.config . Prefiks jest wymagany w źródle konstruktora konfiguracji (na przykład w środowisku). Przewidujemy, że większość deweloperów będzie używać polecenia stripPrefix
.
Aplikacje zazwyczaj usuwają prefiks. Następujące web.config usuwa prefiks:
<configuration>
<configSections>
<section name="configBuilders"
type="System.Configuration.ConfigurationBuildersSection,
System.Configuration, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
restartOnExternalChanges="false" requirePermission="false" />
</configSections>
<configBuilders>
<builders>
<add name="AS_Environment" mode="Greedy" prefix="AppSetting_"
stripPrefix="true"
type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Environment,
Version=1.0.0.0, Culture=neutral" />
<add name="CS_Environment" mode="Greedy" prefix="ConnStr_"
stripPrefix="true"
type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Environment,
Version=1.0.0.0, Culture=neutral" />
</builders>
</configBuilders>
<appSettings configBuilders="AS_Environment">
<add key="ServiceID" value="ServiceID value from web.config" />
<add key="default" value="AppSetting_default value from web.config" />
</appSettings>
<connectionStrings configBuilders="CS_Environment">
<add name="default" connectionString="Data Source=web.config/mydb.db" />
</connectionStrings>
W poprzednim pliku default
web.config klucz znajduje się zarówno w pliku , jak <appSettings/>
i <connectionStrings/>
.
Na poniższej ilustracji przedstawiono <appSettings/>
klucze/wartości i <connectionStrings/>
z poprzedniego pliku web.config ustawionego w edytorze środowiska:
Poniższy kod odczytuje <appSettings/>
klucze/wartości i <connectionStrings/>
zawarte w poprzednim pliku web.config :
public partial class About2 : Page
{
public string ServiceID { get; set; }
public string AppSetting_default { get; set; }
public string ConString { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
ServiceID = ConfigurationManager.AppSettings["ServiceID"];
AppSetting_default = ConfigurationManager.AppSettings["default"];
ConString = ConfigurationManager.ConnectionStrings["default"]
?.ConnectionString;
}
}
Powyższy kod ustawi wartości właściwości na:
- Wartości w pliku web.config , jeśli klucze nie są ustawione w zmiennych środowiskowych.
- Wartości zmiennej środowiskowej, jeśli są ustawione.
Na przykład przy użyciu poprzedniego pliku web.config klucze/wartości w poprzednim obrazie edytora środowiska i poprzedniego kodu są ustawione następujące wartości:
Klucz | Wartość |
---|---|
Identyfikator usługi | AppSetting_ServiceID ze zmiennych env |
default | AppSetting_default wartość z env |
default | ConnStr_default val from env |
tokenPattern
tokenPattern
: Ciąg, wartość domyślna: @"\$\{(\w+)\}"
Zachowanie Expand
konstruktorów wyszukuje nieprzetworzone dane XML dla tokenów, które wyglądają następująco: ${token}
. Wyszukiwanie odbywa się przy użyciu domyślnego wyrażenia @"\$\{(\w+)\}"
regularnego . Zestaw znaków, które są zgodne \w
, jest bardziej rygorystyczny niż XML i wiele źródeł konfiguracji zezwala. Użyj tokenPattern
, jeśli w nazwie tokenu jest wymagana większa liczba znaków @"\$\{(\w+)\}"
.
tokenPattern
:Ciąg:
- Umożliwia deweloperom zmianę wyrażenia regularnego używanego do dopasowywania tokenów.
- Nie wykonano walidacji, aby upewnić się, że jest to dobrze sformułowany, nieniebezpieczniejszy regex.
- Musi zawierać grupę przechwytywania. Cały wyrażeń regularnych musi być zgodny z całym tokenem. Pierwsze przechwycenie musi być nazwą tokenu do wyszukania w źródle konfiguracji.
Konstruktory konfiguracji w microsoft.Configuration.ConfigurationBuilders
EnvironmentConfigBuilder
<add name="Environment"
[mode|prefix|stripPrefix|tokenPattern]
type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Environment" />
- Jest najprostszym konstruktorem konfiguracji.
- Odczytuje wartości ze środowiska.
- Nie ma żadnych dodatkowych opcji konfiguracji.
- Wartość atrybutu
name
jest dowolna.
Uwaga: W środowisku kontenera systemu Windows zmienne ustawiane w czasie wykonywania są wstrzykiwane tylko do środowiska procesu Programu EntryPoint. Aplikacje, które są uruchamiane jako usługa lub proces inny niż EntryPoint, nie pobierają tych zmiennych, chyba że zostaną wprowadzone przez mechanizm w kontenerze. W przypadku kontenerów opartychna ASP.NETusług IIS/ bieżąca wersja ServiceMonitor.exe obsługuje to tylko w puli DefaultAppPool. Inne warianty kontenerów oparte na systemie Windows mogą wymagać opracowania własnego mechanizmu iniekcji dla procesów innych niż EntryPoint.
UserSecretsConfigBuilder
Ostrzeżenie
Nigdy nie przechowuj haseł, poufnych parametrów połączenia ani innych poufnych danych w kodzie źródłowym. Wpisów tajnych produkcyjnych nie należy używać do programowania ani testowania.
<add name="UserSecrets"
[mode|prefix|stripPrefix|tokenPattern]
(userSecretsId="{secret string, typically a GUID}" | userSecretsFile="~\secrets.file")
[optional="true"]
type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.UserSecrets" />
W poprzednim pliku XML userSecretsFile
ścieżka może używać polecenia ~/
lub ~\
. Na przykład ścieżka może być zapisana jako userSecretsFile="~/secrets.file
. Aby uzyskać więcej informacji, zobacz klasę ConfigurationBuilders Utils .
Ten konstruktor konfiguracji udostępnia funkcję podobną do ASP.NET Core Secret Manager.
Element UserSecretsConfigBuilder może być używany w projektach .NET Framework, ale należy określić plik wpisów tajnych. Alternatywnie możesz zdefiniować UserSecretsId
właściwość w pliku projektu i utworzyć nieprzetworzone pliki wpisów tajnych w prawidłowej lokalizacji do odczytu. Aby zachować zależności zewnętrzne poza projektem, plik tajny jest sformatowany w formacie XML. Formatowanie XML jest szczegółem implementacji i nie należy na nim polegać. Jeśli musisz udostępnić plik secrets.json projektom platformy .NET Core, rozważ użycie narzędzia SimpleJsonConfigBuilder. Format SimpleJsonConfigBuilder
platformy .NET Core należy również uznać za szczegóły implementacji, które mogą ulec zmianie.
Atrybuty konfiguracji dla elementu UserSecretsConfigBuilder
:
userSecretsId
— Jest to preferowana metoda identyfikowania pliku wpisów tajnych XML. Działa podobnie do platformy .NET Core, która używaUserSecretsId
właściwości projektu do przechowywania tego identyfikatora. Ciąg musi być unikatowy, nie musi być identyfikatorem GUID. Za pomocą tego atrybutuUserSecretsConfigBuilder
wygląd w dobrze znanej lokalizacji lokalnej (%APPDATA%\Microsoft\UserSecrets\<UserSecrets Id>\secrets.xml
) dla pliku wpisów tajnych należących do tego identyfikatora.userSecretsFile
- Opcjonalny atrybut określający plik zawierający wpisy tajne. Znak~
może być używany na początku, aby odwołać się do katalogu głównego aplikacji. Ten atrybut lubuserSecretsId
atrybut jest wymagany. Jeśli określono oba te elementy,userSecretsFile
pierwszeństwo ma wartość .optional
: wartość logiczna, wartośćtrue
domyślna — uniemożliwia wyjątek, jeśli nie można odnaleźć pliku wpisów tajnych.- Wartość atrybutu
name
jest dowolna.
Plik wpisów tajnych ma następujący format:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<secrets ver="1.0">
<secret name="secret key name" value="secret value" />
</secrets>
</root>
AzureKeyVaultConfigBuilder
<add name="AzureKeyVault"
[mode|prefix|stripPrefix|tokenPattern]
(vaultName="MyVaultName" |
uri="https:/MyVaultName.vault.azure.net")
[version="secrets version"]
[preloadSecretNames="true"]
type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Azure" />
Obiekt AzureKeyVaultConfigBuilder odczytuje wartości przechowywane w usłudze Azure Key Vault.
vaultName
jest wymagana (nazwa magazynu lub identyfikator URI magazynu). Inne atrybuty umożliwiają kontrolowanie, z którym magazynem ma się łączyć, ale są niezbędne tylko wtedy, gdy aplikacja nie jest uruchomiona w środowisku, które współpracuje z Microsoft.Azure.Services.AppAuthentication
programem . Biblioteka uwierzytelniania usług platformy Azure służy do automatycznego odbierania informacji o połączeniu ze środowiska wykonawczego, jeśli jest to możliwe. Możesz automatycznie przesłonić pobieranie informacji o połączeniu, podając parametry połączenia.
vaultName
— Wymagane, jeśliuri
nie podano. Określa nazwę magazynu w subskrypcji platformy Azure, z której mają być odczytywane pary klucz/wartość.uri
- Łączy się z innymi dostawcami Key Vault z określonąuri
wartością. Jeśli nie zostanie określony, platforma Azure (vaultName
) jest dostawcą magazynu.version
— Usługa Azure Key Vault udostępnia funkcję przechowywania wersji wpisów tajnych. Jeśliversion
zostanie określony, konstruktor pobiera tylko wpisy tajne pasujące do tej wersji.preloadSecretNames
— Domyślnie ten konstruktor wykonuje zapytanie o wszystkie nazwy kluczy w magazynie kluczy podczas jego inicjowania. Aby zapobiec odczytywaniu wszystkich wartości klucza, ustaw ten atrybut nafalse
wartość . Ustawienie tego ustawienia nafalse
odczyty wpisów tajnych pojedynczo. Odczytywanie wpisów tajnych pojedynczo może być przydatne, jeśli magazyn zezwala na dostęp "Pobierz", ale nie dostęp do listy. Uwaga: W przypadku korzystania zGreedy
trybupreloadSecretNames
musi byćtrue
(wartość domyślna).
KeyPerFileConfigBuilder
<add name="KeyPerFile"
[mode|prefix|stripPrefix|tokenPattern]
(directoryPath="PathToSourceDirectory")
[ignorePrefix="ignore."]
[keyDelimiter=":"]
[optional="false"]
type="Microsoft.Configuration.ConfigurationBuilders.KeyPerFileConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.KeyPerFile" />
KeyPerFileConfigBuilder to podstawowy konstruktor konfiguracji, który używa plików katalogu jako źródła wartości. Nazwa pliku jest kluczem, a zawartość to wartość. Ten konstruktor konfiguracji może być przydatny podczas uruchamiania w zorganizowanym środowisku kontenera. Systemy takie jak Docker Swarm i Kubernetes zapewniają secrets
orkiestrowane kontenery systemu Windows w ten sposób dla poszczególnych plików.
Szczegóły atrybutu:
directoryPath
-Wymagane. Określa ścieżkę do wyszukiwania wartości. Platforma Docker dla wpisów tajnych systemu Windows jest domyślnie przechowywana w katalogu C:\ProgramData\Docker\secrets .ignorePrefix
— Pliki rozpoczynające się od tego prefiksu są wykluczone. Wartość domyślna to "ignore.".keyDelimiter
- Wartość domyślna tonull
. Jeśli zostanie określony, konstruktor konfiguracji przechodzi wiele poziomów katalogu, tworząc nazwy kluczy za pomocą tego ogranicznika. Jeśli ta wartość tonull
, konstruktor konfiguracji patrzy tylko na najwyższy poziom katalogu.optional
- Wartość domyślna tofalse
. Określa, czy konstruktor konfiguracji powinien powodować błędy, jeśli katalog źródłowy nie istnieje.
SimpleJsonConfigBuilder
Ostrzeżenie
Nigdy nie przechowuj haseł, poufnych parametrów połączenia ani innych poufnych danych w kodzie źródłowym. Wpisów tajnych produkcyjnych nie należy używać do programowania ani testowania.
<add name="SimpleJson"
[mode|prefix|stripPrefix|tokenPattern]
jsonFile="~\config.json"
[optional="true"]
[jsonMode="(Flat|Sectional)"]
type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder,
Microsoft.Configuration.ConfigurationBuilders.Json" />
Projekty platformy .NET Core często używają plików JSON do konfiguracji. Konstruktor SimpleJsonConfigBuilder umożliwia używanie plików JSON platformy .NET Core w .NET Framework. Ten konstruktor konfiguracji udostępnia podstawowe mapowanie z płaskiego źródła klucz/wartość do określonych obszarów klucz/wartość .NET Framework konfiguracji. Ten konstruktor konfiguracji nie zapewnia konfiguracji hierarchicznych. Plik kopii zapasowej JSON jest podobny do słownika, a nie złożonego obiektu hierarchicznego. Można użyć pliku hierarchicznego na wielu poziomach. Ten dostawca flatten
określa głębokość, dołączając nazwę właściwości na każdym poziomie przy użyciu :
jako ogranicznika.
Szczegóły atrybutu:
jsonFile
-Wymagane. Określa plik JSON do odczytu. Znak~
można użyć na początku, aby odwołać się do katalogu głównego aplikacji.optional
- Wartość logiczna, wartość domyślna totrue
. Zapobiega zgłaszaniu wyjątków, jeśli nie można odnaleźć pliku JSON.jsonMode
-[Flat|Sectional]
. Wartość domyślna toFlat
. GdyjsonMode
parametr maFlat
wartość , plik JSON jest pojedynczym źródłem klucza/wartości płaskiej. WartościEnvironmentConfigBuilder
iAzureKeyVaultConfigBuilder
są również pojedynczymi płaskimi źródłami klucza/wartości. Po skonfigurowaniu elementuSimpleJsonConfigBuilder
wSectional
trybie:- Plik JSON jest koncepcyjnie podzielony tylko na najwyższym poziomie na wiele słowników.
- Każdy słownik jest stosowany tylko do sekcji konfiguracji zgodnej z nazwą właściwości najwyższego poziomu dołączoną do nich. Przykład:
{
"appSettings" : {
"setting1" : "value1",
"setting2" : "value2",
"complex" : {
"setting1" : "complex:value1",
"setting2" : "complex:value2",
}
}
}
Kolejność konstruktorów konfiguracji
Zobacz ConfigurationBuilders Order of Execution w repozytorium GitHub aspnet/MicrosoftConfigurationBuilders .
Implementowanie niestandardowego konstruktora konfiguracji klucza/wartości
Jeśli konstruktorzy konfiguracji nie spełniają Twoich potrzeb, możesz napisać niestandardowy. Klasa KeyValueConfigBuilder
bazowa obsługuje tryby podstawienia i większość problemów z prefiksem. Projekt implementowania wymaga tylko:
- Dziedzicz z klasy bazowej i zaimplementuj podstawowe źródło par klucz/wartość za pośrednictwem elementów
GetValue
iGetAllValues
: - Dodaj element Microsoft.Configuration.ConfigurationBuilders.Base do projektu.
using Microsoft.Configuration.ConfigurationBuilders;
using System.Collections.Generic;
public class MyCustomConfigBuilder : KeyValueConfigBuilder
{
public override string GetValue(string key)
{
// Key lookup should be case-insensitive, because most key/value collections in
// .NET Framework config sections are case-insensitive.
return "Value for given key, or null.";
}
public override ICollection<KeyValuePair<string, string>> GetAllValues(string prefix)
{
// Populate the return collection.
return new Dictionary<string, string>() { { "one", "1" }, { "two", "2" } };
}
}
Klasa KeyValueConfigBuilder
bazowa zapewnia wiele pracy i spójnego zachowania w konstruktorach konfiguracji klucz/wartość.
Dodatkowe zasoby
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla