asp.net-core
Aufbau
Suche…
Einführung
Der Asp.net-Kern bietet Konfigurationsabstraktionen. Mit ihnen können Sie Konfigurationseinstellungen aus verschiedenen Quellen laden und ein endgültiges Konfigurationsmodell erstellen, das dann von Ihrer Anwendung verwendet werden kann.
Syntax
-
IConfiguration
-
string this[string key] { get; set; }
-
IEnumerable<IConfigurationSection> GetChildren();
-
IConfigurationSection GetSection(string key);
Zugriff auf die Konfiguration mithilfe der Abhängigkeitseinspritzung
Der empfohlene Ansatz wäre, dies zu vermeiden und stattdessen IOptions<TOptions>
und IServiceCollection.Configure<TOptions>
.
Das heißt, es ist immer noch ziemlich einfach, IConfigurationRoot
für die IConfigurationRoot
Anwendung verfügbar zu machen.
Im Startup.cs-Konstruktor sollte der folgende Code zum Erstellen der Konfiguration vorhanden sein:
Configuration = builder.Build();
Hier ist Configuration
eine Instanz von IConfigurationRoot
Sie diese Instanz als Singleton der Servicesammlung in der ConfigureServices-Methode Startup.cs hinzu.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfigurationRoot>(provider => Configuration);
Zum Beispiel können Sie jetzt auf die Konfiguration in einem Controller / Dienst zugreifen
public MyController(IConfigurationRoot config){
var setting1= config.GetValue<string>("Setting1")
}
Fertig machen
In diesem Beispiel beschreiben wir, was passiert, wenn Sie ein neues Projekt erstellen.
Als erstes werden die folgenden Abhängigkeiten zu project.json
Projekt hinzugefügt (derzeit project.json
Datei):
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
Außerdem wird in Ihrer Datei " Startup.cs
ein Konstruktor erstellt, der für die Erstellung der Konfiguration mithilfe von ConfigurationBuilder
fließend api verantwortlich ist:
- Zuerst wird ein neuer
ConfigurationBuilder
. - Dann wird ein Basispfad festgelegt, der zur Berechnung des absoluten Pfads weiterer Dateien verwendet wird
- Es fügt dem Konfigurations-Builder eine optionale
appsettings.json
hinzu und überwacht deren Änderungen - Es fügt eine optionale,
appsettings.environementName.json
Konfigurationsdateiappsettings.environementName.json
hinzu - Dann werden Umgebungsvariablen hinzugefügt.
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(); }
Wenn in mehreren Quellen dieselbe Einstellung festgelegt ist, gewinnt die zuletzt hinzugefügte Quelle und ihr Wert wird ausgewählt.
Die Konfiguration kann dann mit der Indexer-Eigenschaft verwendet werden. Der Doppelpunkt :
Zeichen dienen als Trennzeichen.
Configuration["AzureLogger:ConnectionString"]
Dadurch wird nach einem Konfigurationswert ConnectionString
in einem AzureLogger
Abschnitt AzureLogger
.
Arbeit mit Umgebungsvariablen
Sie können die Konfiguration aus Umgebungsvariablen .AddEnvironmentVariables()
indem Sie .AddEnvironmentVariables()
in .AddEnvironmentVariables()
ConfigurationBuilder
aufrufen.
Es wird Umgebungsvariablen geladen werden mit dem Präfix APPSETTING_
Es wird dann Doppelpunkt verwenden :
als Schlüssel Pfadseparator.
Das bedeutet: folgende Umgebungseinstellungen:
APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password
Wird das Äquivalent dieses Json sein:
{
"Security" : {
"Authentication" : {
"UserName" : "a_user_name",
"Password" : "a_user_password"
}
}
}
** Beachten Sie, dass der Azure-Dienst Einstellungen als Umgebungsvariablen überträgt. Das Präfix wird für Sie transparent eingestellt. Um dasselbe in Azure zu tun, legen Sie einfach zwei Anwendungseinstellungen im AppSettings-Blatt fest:
Security:Authentication:UserName a_user_name
Security:Authentication:Password a_user_password
Optionsmodell und Konfiguration
Wenn Sie mit großen Konfigurationssätzen arbeiten, kann es ziemlich unhandlich werden, sie zu kaufen.
Das mit asp.net gelieferte Optionsmodell bietet eine bequeme Möglichkeit, einen section
einem Dotnet- poco
zuzuordnen: Zum Beispiel könnten Sie StorageOptions
direkt aus einem Konfigurationsabschnitt hydratisieren, indem Sie das Paket Microsoft.Extensions.Options.ConfigurationExtensions
hinzufügen und das Configure<TOptions>(IConfiguration config)
Erweiterungsmethode Configure<TOptions>(IConfiguration config)
.
services.Configure<StorageOptions>(Configuration.GetSection("Storage"));
In Speicherkonfigurationsquelle
Sie können die Konfiguration auch aus einem In-Memory-Objekt wie einem Dictionary<string,string>
.AddInMemoryCollection(new Dictionary<string, string>
{
["akey"] = "a value"
})
Dies kann bei Integrations- / Komponententestszenarien hilfreich sein.