Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


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.

Konstruktorzy konfiguracji klucz/wartość

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ść.

Ustawienia konstruktorów konfiguracji klucz/wartość

Następujące ustawienia dotyczą wszystkich konstruktorów konfiguracji klucz/wartość w programie Microsoft.Configuration.ConfigurationBuilders.

Tryb

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 z Strict 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:

Zrzut ekranu przedstawia edytor zmiennych środowiskowych z wyróżnionymi zmiennymi ServiceID i ServiceKey.

Uwaga: może być konieczne zamknięcie i ponowne uruchomienie programu Visual Studio, aby zobaczyć zmiany w zmiennych środowiskowych.

Obsługa prefiksów

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ślnym Strict 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 EnvironmentConfigBuilders w Greedy trybie z odrębnymi prefiksami i stripPrefix. 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 EnvironmentConfigBuilders w Greedy 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:

Zrzut ekranu przedstawia edytor zmiennych środowiskowych z wyróżnionymi zmiennymi AppSetting_default, AppSetting_ServiceID i ConnStr_default.

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

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 stripPrefixprefiks 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:

Zrzut ekranu przedstawia edytor zmiennych środowiskowych z wyróżnionymi zmiennymi AppSetting_default, AppSetting_ServiceID i ConnStr_default.

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

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.

Konstruktory konfiguracji w programie Microsoft.Configuration.ConfigurationBuilders

EnvironmentConfigBuilder

<add name="Environment"
    [mode|prefix|stripPrefix|tokenPattern] 
    type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
    Microsoft.Configuration.ConfigurationBuilders.Environment" />

EnvironmentConfigBuilder:

  • 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.

UserSecretsConfigBuilder

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żywa UserSecretsId właściwości projektu do przechowywania tego identyfikatora. Ciąg musi być unikatowy, nie musi być identyfikatorem GUID. Za pomocą tego atrybutu UserSecretsConfigBuilder 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 lub userSecretsId 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>

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" />

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.AppAuthenticationktó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śli uri 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śli version 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 na falsewartość . Ustawienie tej wartości na false 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 z Greedy trybu preloadSecretNames 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ść 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 to null. Jeśli zostanie określony, konstruktor konfiguracji przechodzi wiele poziomów katalogu, tworząc nazwy kluczy za pomocą tego ogranicznika. Jeśli ta wartość to null, konstruktor konfiguracji patrzy tylko na najwyższy poziom katalogu.
  • optional - Wartość domyślna to false. 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 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 flattenjest 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 to true. Zapobiega zgłaszaniu wyjątków, jeśli nie można odnaleźć pliku JSON.

  • jsonMode - [Flat|Sectional]. Wartość domyślna to Flat. Gdy jsonMode parametr to Flat, plik JSON jest pojedynczym źródłem prostego klucza/wartości. Wartości EnvironmentConfigBuilder i AzureKeyVaultConfigBuilder są również pojedynczymi prostymi źródłami klucza/wartości. Po skonfigurowaniu elementu SimpleJsonConfigBuilder w Sectional 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",
            }
        }
    }

Kolejność konstruktorów konfiguracji

Zobacz ConfigurationBuilders Order of Execution w repozytorium aspnet/MicrosoftConfigurationBuilders GitHub.

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:

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ść.

Dodatkowe zasoby