asp.net-core
Konfiguracja
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
:
- Najpierw tworzy nowy
ConfigurationBuilder
. - Następnie ustawia ścieżkę bazową, która będzie używana do obliczenia ścieżki bezwzględnej dalszych plików
- Dodaje do
appsettings.json
konfiguracji opcjonalny plikappsettings.json
i monitoruje jego zmiany - Dodaje opcjonalny plik konfiguracyjny
appsettings.environementName.json
- 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.