Sök…


Introduktion

Asp.net-kärnan ger konfigurationsabstraktioner. De låter dig ladda konfigurationsinställningar från olika källor och bygga en slutlig konfigurationsmodell som sedan kan konsumeras av din applikation.

Syntax

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

Få åtkomst till konfiguration med beroende injektion

Det rekommenderade tillvägagångssättet skulle vara att undvika att göra det och snarare använda IOptions<TOptions> och IServiceCollection.Configure<TOptions> .

Som sagt, detta är fortfarande ganska enkelt att göra IConfigurationRoot tillgänglig applikation bred.

I Startup.cs-konstruktören bör du ha följande kod för att bygga konfigurationen,

 Configuration = builder.Build();

Här är Configuration en instans av IConfigurationRoot , och lägg till den här instansen som en Singleton till tjänstesamlingen i metoden ConfigureServices, Startup.cs,

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

Till exempel kan du nu komma åt konfigurationen i en Controller / Service

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

Komma igång

I det här exemplet kommer vi att beskriva vad som händer när du ställer in ett nytt projekt.

Först läggs följande beroenden till project.json projekt (för närvarande project.json fil):

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

Det kommer också att skapa en konstruktör i din Startup.cs fil som kommer att ansvara för att bygga konfigurationen med hjälp av ConfigurationBuilder flytande api:

  1. Den skapar först en ny ConfigurationBuilder .
  2. Den sätter sedan en basväg som kommer att användas för att beräkna absolut sökväg för ytterligare filer
  3. Det lägger till valfri appsettings.json till konfigurationsbyggaren och övervakar dess förändringar
  4. Den lägger till en valfri miljörelaterad konfigurationsfil för appsettings.environementName.json
  5. Därefter läggs till miljövariabler.
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();
}

Om samma inställning ställs in i flera källor vinner den senaste källan som lagts till och dess värde väljs.

Konfiguration kan sedan konsumeras med indexeregenskapen. Kolon : karaktär tjänar en vägavgränsare.

Configuration["AzureLogger:ConnectionString"]

Detta kommer att leta efter ett konfigurationsvärde ConnectionString i ett AzureLogger avsnitt.

Arbeta med miljövariabler

Du kan källa till konfiguration från miljövariabler genom att ringa .AddEnvironmentVariables() på din ConfigurationBuilder .

Den kommer att ladda miljövariabler förinställd med APPSETTING_ Den kommer sedan att använda kolon : som nyckelvägsavskiljare.

Detta betyder att följande miljöinställningar:

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

Kommer att motsvara denna json:

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

** Observera att Azure Service överför inställningar som miljövariabler. Prefix ställs in för dig på ett öppet sätt. Så för att göra detsamma i Azure ställer du bara in två applikationsinställningar i AppSettings blad:

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

Alternativmodell och konfiguration

När du hanterar stora konfigurationsuppsättningar av värde, kan det bli ganska obekvämt att ladda dem en köp en.

Alternativmodell som kommer med asp.net erbjuder ett bekvämt sätt att kartlägga ett section till en dotnet- poco : Till exempel kan man StorageOptions direkt från ett konfigurationsavsnitt b lägga till Microsoft.Extensions.Options.ConfigurationExtensions paketet och ringa Configure<TOptions>(IConfiguration config) förlängningsmetod.

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

I minneskonfigureringskälla

Du kan också källa till konfiguration från ett i minnesobjekt som en Dictionary<string,string>

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

Detta kan avslöja användbara i scenarier för integration / enhetstest.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow