asp.net-core
Configuratie
Zoeken…
Invoering
Asp.net-kern biedt configuratie-abstracties. Hiermee kunt u configuratie-instellingen uit verschillende bronnen laden en een definitief configuratiemodel bouwen dat vervolgens door uw toepassing kan worden gebruikt.
Syntaxis
-
IConfiguration
-
string this[string key] { get; set; }
-
IEnumerable<IConfigurationSection> GetChildren();
-
IConfigurationSection GetSection(string key);
Toegang tot configuratie met behulp van Dependency Injection
De aanbevolen aanpak is om dit te voorkomen en liever IOptions<TOptions>
en IServiceCollection.Configure<TOptions>
.
Dat gezegd hebbende, dit is nog steeds vrij eenvoudig om IConfigurationRoot
applicatie breed beschikbaar te maken.
In de constructor Startup.cs moet u de volgende code hebben om de configuratie te bouwen,
Configuration = builder.Build();
Hier is Configuration
een exemplaar van IConfigurationRoot
. Voeg dit exemplaar als Singleton toe aan de servicecollectie in de methode ConfigureServices, Startup.cs,
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfigurationRoot>(provider => Configuration);
U hebt nu bijvoorbeeld toegang tot de configuratie in een controller / service
public MyController(IConfigurationRoot config){
var setting1= config.GetValue<string>("Setting1")
}
Ermee beginnen
In dit voorbeeld beschrijven we wat er gebeurt wanneer u een nieuw project steekt.
Allereerst worden de volgende afhankelijkheden aan uw project toegevoegd (momenteel project.json
bestand):
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
Het zal ook een constructor in uw Startup.cs
bestand maken die de configuratie zal bouwen met behulp van de vloeiende API ConfigurationBuilder
:
- Er wordt eerst een nieuwe
ConfigurationBuilder
. - Vervolgens wordt een basispad ingesteld dat wordt gebruikt om het absolute pad van verdere bestanden te berekenen
- Het voegt een optionele
appsettings.json
aan de configuratiebuilder en controleert de wijzigingen - Het voegt een optioneel omgevingsgerelateerd configuratie-bestand
appsettings.environementName.json
- Vervolgens worden omgevingsvariabelen toegevoegd.
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(); }
Als dezelfde instelling in verschillende bronnen is ingesteld, wint de laatst toegevoegde bron en wordt de waarde ervan geselecteerd.
Configuratie kan vervolgens worden verbruikt met behulp van de eigenschap indexer. De dubbele punt :
teken dient een padscheidingsteken.
Configuration["AzureLogger:ConnectionString"]
Dit zoekt naar een configuratiewaarde ConnectionString
in een AzureLogger
sectie.
Werken met omgevingsvariabelen
U kunt configuratie van omgevingsvariabelen gebruiken door .AddEnvironmentVariables()
aan te roepen in uw ConfigurationBuilder
.
Het laadt omgevingsvariabelen met het voorvoegsel APPSETTING_
Het gebruikt dan dubbele punt :
als scheidingsteken voor het sleutelpad.
Dit betekent dat: de volgende omgevingsinstellingen:
APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password
Zal het equivalent zijn van deze json:
{
"Security" : {
"Authentication" : {
"UserName" : "a_user_name",
"Password" : "a_user_password"
}
}
}
** Merk op dat Azure Service instellingen zal verzenden als omgevingsvariabelen. Het voorvoegsel wordt transparant voor u ingesteld. Om hetzelfde te doen in Azure, stel je gewoon twee applicatie-instellingen in de AppSettings-blade in:
Security:Authentication:UserName a_user_name
Security:Authentication:Password a_user_password
Optiemodel en configuratie
Wanneer het gaat om grote configuratiesets van waarde, kan het nogal onhandig worden om ze één te kopen.
Het optiemodel dat bij asp.net wordt geleverd, biedt een handige manier om een section
te wijzen aan een dotnet poco
: u kunt bijvoorbeeld StorageOptions
rechtstreeks hydrateren vanuit een configuratiesectie door Microsoft.Extensions.Options.ConfigurationExtensions
pakket toe te voegen en het Configure<TOptions>(IConfiguration config)
uitbreidingsmethode.
services.Configure<StorageOptions>(Configuration.GetSection("Storage"));
In geheugenconfiguratiebron
U kunt ook een configuratie uitvoeren vanuit een in-memory-object zoals een Dictionary<string,string>
.AddInMemoryCollection(new Dictionary<string, string>
{
["akey"] = "a value"
})
Dit kan nuttig zijn in scenario's voor integratie / eenheidstests.