Szukaj…


Wprowadzenie

Rdzeń Asp.net zapewnia abstrakcje konfiguracji. Pozwalają załadować ustawienia konfiguracji z różnych źródeł i zbudować ostateczny model konfiguracji, który może być następnie wykorzystany przez aplikację.

Składnia

  • IConfiguration
  • string this[string key] { get; set; }
  • IEnumerable<IConfigurationSection> GetChildren();
  • IConfigurationSection GetSection(string key);

Dostęp do konfiguracji za pomocą wstrzykiwania zależności

Zalecanym podejściem byłoby uniknięcie tego i raczej użycie IOptions<TOptions> i IServiceCollection.Configure<TOptions> .

To powiedziawszy, nadal jest dość proste, aby aplikacja IConfigurationRoot była IConfigurationRoot dostępna.

W konstruktorze Startup.cs powinieneś mieć następujący kod, aby zbudować konfigurację,

 Configuration = builder.Build();

Tutaj Configuration jest instancją IConfigurationRoot , i dodaj tę instancję jako Singleton do kolekcji usług w metodzie ConfigureServices, Startup.cs,

 public void ConfigureServices(IServiceCollection services)
 {
    services.AddSingleton<IConfigurationRoot>(provider => Configuration);

Na przykład możesz teraz uzyskać dostęp do konfiguracji w kontrolerze / usłudze

  public MyController(IConfigurationRoot config){
      var setting1= config.GetValue<string>("Setting1")
  }

Pierwsze kroki

W tym przykładzie opiszemy, co się stanie, gdy rusztujesz nowy projekt.

Po pierwsze, do twojego projektu zostaną dodane następujące zależności (obecnie plik project.json ):

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",

Stworzy również konstruktor w pliku Startup.cs , który będzie odpowiedzialny za budowanie konfiguracji za ConfigurationBuilder płynnego interfejsu API ConfigurationBuilder :

  1. Najpierw tworzy nowy ConfigurationBuilder .
  2. Następnie ustawia ścieżkę bazową, która będzie używana do obliczenia ścieżki bezwzględnej dalszych plików
  3. Dodaje do appsettings.json konfiguracji opcjonalny plik appsettings.json i monitoruje jego zmiany
  4. Dodaje opcjonalny plik konfiguracyjny appsettings.environementName.json
  5. Następnie dodaje zmienne środowiskowe.
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

Jeśli to samo ustawienie jest ustawione w kilku źródłach, najnowsze dodane źródło wygra i jego wartość zostanie wybrana.

Konfiguracja może być następnie wykorzystana przy użyciu właściwości indeksatora. Znak dwukropka : służy do ogranicznika ścieżki.

Configuration["AzureLogger:ConnectionString"]

Spowoduje to wyszukanie wartości konfiguracji ConnectionString w sekcji AzureLogger .

Praca ze zmiennymi środowiskowymi

Możesz pobrać konfigurację ze zmiennych środowiskowych, wywołując .AddEnvironmentVariables() na ConfigurationBuilder .

APPSETTING_ zmienne środowiskowe z prefiksem APPSETTING_ Następnie użyje dwukropka : jako separatora ścieżki klucza.

Oznacza to, że: następujące ustawienia środowiska:

APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password

Będzie równoważny temu Jsonowi:

{
    "Security" : {
       "Authentication" : {
           "UserName" : "a_user_name",
           "Password" : "a_user_password" 
        } 
    }
}

** Pamiętaj, że usługa Azure prześle ustawienia jako zmienne środowiskowe. Prefiks zostanie ustawiony dla Ciebie w sposób przezroczysty. Aby zrobić to samo na platformie Azure, wystarczy ustawić dwa ustawienia aplikacji w bloku AppSettings:

Security:Authentication:UserName         a_user_name
Security:Authentication:Password         a_user_password

Model i konfiguracja opcji

Gdy mamy do czynienia z dużymi zestawami wartości konfiguracji, ładowanie ich jednym zakupem może okazać się dość nieprzydatne.

Opcjonalny model dostarczany z asp.net oferuje wygodny sposób na mapowanie section do poco dotnet: Na przykład można nawodnić StorageOptions bezpośrednio z sekcji konfiguracji b, dodając pakiet Microsoft.Extensions.Options.ConfigurationExtensions i wywołując Configure<TOptions>(IConfiguration config) Metoda rozszerzenia Configure<TOptions>(IConfiguration config) .

services.Configure<StorageOptions>(Configuration.GetSection("Storage"));

W źródle konfiguracji pamięci

Możesz także pobrać konfigurację źródłową z obiektu w pamięci, takiego jak Dictionary<string,string>

.AddInMemoryCollection(new Dictionary<string, string>
{
    ["akey"] = "a value"
})

Może to okazać się pomocne w scenariuszach integracji / testów jednostkowych.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow