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 :

  1. Er wordt eerst een nieuwe ConfigurationBuilder .
  2. Vervolgens wordt een basispad ingesteld dat wordt gebruikt om het absolute pad van verdere bestanden te berekenen
  3. Het voegt een optionele appsettings.json aan de configuratiebuilder en controleert de wijzigingen
  4. Het voegt een optioneel omgevingsgerelateerd configuratie-bestand appsettings.environementName.json
  5. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow