Konstruktory konfiguracji dla platformy ASP.NET
Przez Stephen Molloy i Rick Anderson
Konstruktorzy konfiguracji zapewniają nowoczesny i zwinny mechanizm dla aplikacji ASP.NET w celu uzyskania wartości konfiguracji ze źródeł zewnętrznych.
Konstruktorzy konfiguracji:
- Są dostępne w programie .NET Framework 4.7.1 lub nowszym.
- Zapewnienie elastycznego mechanizmu odczytywania wartości konfiguracji.
- Rozwiąż niektóre podstawowe potrzeby 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ł, które były wcześniej niedostępne (na przykład usługa Azure Key Vault i zmienne środowiskowe) w systemie konfiguracji platformy .NET.
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 programu ConfigurationBuilders programu .NET Framework nie jest ograniczona do określonych sekcji lub wzorców konfiguracji. Jednak wiele konstruktorów konfiguracji w usłudze Microsoft.Configuration.ConfigurationBuilders
(github, NuGet) działa w ramach wzorca klucz/wartość.
Następujące ustawienia dotyczą wszystkich konstruktorów konfiguracji klucz/wartość w programie Microsoft.Configuration.ConfigurationBuilders
.
Konstruktorzy 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
mode wylicza każdy klucz w sekcji . Jeśli w źródle zewnętrznym zostanie znaleziony pasujący klucz:- Konstruktorzy konfiguracji zastępują wartość w wynikowej sekcji konfiguracji wartością ze źródła zewnętrznego.
Greedy
- Ten tryb jest ściśle powiązany zStrict
trybem. Zamiast ograniczać się do kluczy, które już istnieją w oryginalnej konfiguracji:- Konstruktorzy konfiguracji dodają wszystkie pary klucz/wartość z zewnętrznego źródła do wynikowej sekcji konfiguracji.
Expand
— Działa na nieprzetworzonym kodzie 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 w źródle zewnętrznym nie zostanie znaleziona żadna odpowiadająca wartość, token nie zostanie zmieniony. Konstruktory w tym trybie nie są ograniczone do<appSettings/>
sekcji i<connectionStrings/>
.
Następujące znaczniki z pliku web.config umożliwiają 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 pliku web.config", jeśli zmienna środowiskowa
ServiceID
nie jest ustawiona. - Wartość zmiennej środowiskowej
ServiceID
, jeśli jest 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, aby zobaczyć zmiany w zmiennych środowiskowych.
Prefiksy kluczy mogą uprościć ustawianie kluczy, ponieważ:
- Konfiguracja programu .NET Framework jest złożona i zagnieżdżona.
- Zewnętrzne źródła klucz/wartość są często podstawowe i płaskie z natury. Na przykład zmienne środowiskowe nie są zagnieżdżone.
Użyj dowolnego z następujących podejść, aby wstrzyknąć zarówno do konfiguracji, jak <appSettings/>
i <connectionStrings/>
za pomocą zmiennych środowiskowych:
EnvironmentConfigBuilder
W trybie domyślnymStrict
i odpowiednich nazwach kluczy w pliku konfiguracji. Powyższy kod i adiustacja przyjmuje to podejście. Korzystając z tego podejścia, nie można mieć identycznych nazwanych kluczy zarówno w systemach , jak<appSettings/>
i<connectionStrings/>
.- Użyj dwóch
EnvironmentConfigBuilder
s wGreedy
trybie z odrębnymi prefiksami istripPrefix
. Dzięki takiemu 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. Na 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 znacznika 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/>
<connectionStrings/>
klucze/wartości 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 ustawiane są następujące wartości:
Key | Wartość |
---|---|
AppSetting_ServiceID | AppSetting_ServiceID ze zmiennych env |
AppSetting_default | AppSetting_default wartość z env |
ConnStr_default | ConnStr_default val from env |
stripPrefix
: wartość logiczna, wartość domyślna to false
.
Powyższy kod XML oddziela ustawienia aplikacji od parametry połączenia, ale wymaga, aby wszystkie klucze w pliku web.config używał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ć programu stripPrefix
.
Aplikacje zazwyczaj usuwają prefiks. Następujący plik 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/>
<connectionStrings/>
klucze/wartości 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 ustawiane są następujące wartości:
Key | Wartość |
---|---|
Identyfikator usługi | AppSetting_ServiceID ze zmiennych env |
domyślna | AppSetting_default wartość z env |
domyślna | ConnStr_default val from env |
tokenPattern
: Ciąg, wartości domyślne @"\$\{(\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, a wiele źródeł konfiguracji zezwala. Użyj tokenPattern
, jeśli w nazwie tokenu jest wymagana większa liczba znaków @"\$\{(\w+)\}"
.
tokenPattern
:Struna:
- 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, nienagroźny regex.
- Musi zawierać grupę przechwytywania. Cały rejestr musi być zgodny z całym tokenem. Pierwsze przechwytywanie musi być nazwą tokenu do wyszukania w źródle konfiguracji.
<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 działają jako usługa lub proces inny niż EntryPoint, nie pobierają tych zmiennych, chyba że zostaną one w inny sposób wprowadzone za pośrednictwem mechanizmu w kontenerze. W przypadku kontenerów opartych na ASP.NET usług IIS/bieżąca wersja ServiceMonitor.exe obsługuje to tylko w puli DefaultAppPool. Inne warianty kontenera oparte na systemie Windows mogą wymagać opracowania własnego mechanizmu iniekcji dla procesów innych niż EntryPoint.
Ostrzeżenie
Nigdy nie przechowuj haseł, poufnych parametry połączenia ani innych poufnych danych w kodzie źródłowym. Wpisy tajne produkcyjne nie powinny być używane 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 programu .NET Framework, ale należy określić plik wpisów tajnych. Alternatywnie można zdefiniować UserSecretsId
właściwość w pliku projektu i utworzyć plik nieprzetworzonych 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, a format nie powinien być oparty. 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żna użyć na początku, aby odwołać się do katalogu głównego aplikacji. Ten atrybut lubuserSecretsId
atrybut jest wymagany. Jeśli oba są określone,userSecretsFile
ma pierwszeństwo.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>
<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" />
AzureKeyVaultConfigBuilder odczytuje wartości przechowywane w usłudze Azure Key Vault.
vaultName
jest wymagane (nazwa magazynu lub identyfikator URI w magazynie). Inne atrybuty umożliwiają kontrolowanie, z którym magazynem ma się łączyć, ale są niezbędne tylko wtedy, gdy aplikacja nie działa w środowisku, z Microsoft.Azure.Services.AppAuthentication
którym działa program . 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ć informacje 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 usługi 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 inicjowania. Aby zapobiec odczytywaniu wszystkich wartości klucza, ustaw ten atrybut nafalse
wartość . Ustawienie tej wartości nafalse
potrzeby odczytywania 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).
<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ść jest wartością. Ten konstruktor konfiguracji może być przydatny podczas uruchamiania w zorganizowanym środowisku kontenera. Systemy, takie jak Docker Swarm i Kubernetes, zapewniają secrets
kontenery systemu Windows zaaranżowane 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.
Ostrzeżenie
Nigdy nie przechowuj haseł, poufnych parametry połączenia ani innych poufnych danych w kodzie źródłowym. Wpisy tajne produkcyjne nie powinny być używane 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 programie .NET Framework. Ten konstruktor konfiguracji udostępnia podstawowe mapowanie z prostego źródła klucza/wartości do określonych obszarów klucz/wartość konfiguracji programu .NET Framework. 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
jest głębią, 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 toFlat
, plik JSON jest pojedynczym źródłem prostego klucza/wartości. WartościEnvironmentConfigBuilder
iAzureKeyVaultConfigBuilder
są również pojedynczymi prostymi źródłami klucza/wartości. Po skonfigurowaniu elementuSimpleJsonConfigBuilder
wSectional
trybie:- Plik JSON jest koncepcyjnie podzielony tylko na najwyższy poziom na wiele słowników.
- Każdy z słowników jest stosowany tylko do sekcji konfiguracji zgodnej z nazwą właściwości najwyższego poziomu dołączoną do nich. Na przykład:
{
"appSettings" : {
"setting1" : "value1",
"setting2" : "value2",
"complex" : {
"setting1" : "complex:value1",
"setting2" : "complex:value2",
}
}
}
Zobacz ConfigurationBuilders Order of Execution w repozytorium aspnet/MicrosoftConfigurationBuilders GitHub.
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 pomocą elementów
GetValue
i :GetAllValues
- 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ójne zachowanie w konstruktorach konfiguracji klucz/wartość.