asp.net-core
Configurazione
Ricerca…
introduzione
Asp.net core fornisce astrazioni di configurazione. Permettono di caricare le impostazioni di configurazione da varie fonti e creare un modello di configurazione finale che può essere quindi utilizzato dall'applicazione.
Sintassi
-
IConfiguration
-
string this[string key] { get; set; }
-
IEnumerable<IConfigurationSection> GetChildren();
-
IConfigurationSection GetSection(string key);
Accesso alla configurazione mediante Iniezione delle dipendenze
L'approccio consigliato sarebbe evitare di farlo e piuttosto utilizzare IOptions<TOptions>
e IServiceCollection.Configure<TOptions>
.
Detto questo, è ancora abbastanza semplice rendere IConfigurationRoot
disponibile per IConfigurationRoot
le applicazioni.
Nel costruttore Startup.cs dovresti avere il seguente codice per costruire la configurazione,
Configuration = builder.Build();
Qui Configuration
è un'istanza di IConfigurationRoot
, e aggiungi questa istanza come Singleton alla raccolta di servizi nel metodo ConfigureServices, Startup.cs,
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfigurationRoot>(provider => Configuration);
Ad esempio, ora è possibile accedere alla configurazione in un controller / servizio
public MyController(IConfigurationRoot config){
var setting1= config.GetValue<string>("Setting1")
}
Iniziare
In questo esempio descriveremo cosa succede quando impalcature un nuovo progetto.
Per prima cosa, verranno aggiunte le seguenti dipendenze al progetto (attualmente project.json
file):
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
Creerà anche un costruttore nel file Startup.cs
che sarà responsabile della creazione della configurazione utilizzando l'API fluente di ConfigurationBuilder
:
- Prima crea un nuovo
ConfigurationBuilder
. - Quindi imposta un percorso di base che verrà utilizzato per calcolare il percorso assoluto di ulteriori file
- Aggiunge un
appsettings.json
opzionale.json al builder di configurazione e monitora le sue modifiche - Aggiunge un file di configurazione
appsettings.environementName.json
relativo all'ambiente opzionale - Quindi aggiunge le variabili di ambiente.
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(); }
Se una stessa impostazione è impostata su più fonti, l'ultima sorgente aggiunta vincerà e il suo valore sarà selezionato.
La configurazione può quindi essere utilizzata utilizzando la proprietà dell'indicizzatore. I due punti :
carattere serve un delimitatore di percorso.
Configuration["AzureLogger:ConnectionString"]
Questo cercherà un valore di configurazione ConnectionString
in una sezione di AzureLogger
.
Lavora con le variabili d'ambiente
È possibile creare la configurazione di origine dalle variabili di ambiente chiamando .AddEnvironmentVariables()
su ConfigurationBuilder
.
Caricherà le variabili di ambiente prefissate con APPSETTING_
Quindi userà due punti :
come separatore del percorso chiave.
Ciò significa che: seguendo le impostazioni dell'ambiente:
APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password
Sarà l'equivalente di questo json:
{
"Security" : {
"Authentication" : {
"UserName" : "a_user_name",
"Password" : "a_user_password"
}
}
}
** Si noti che il servizio di Azure trasmetterà le impostazioni come variabili di ambiente. Il prefisso verrà impostato per te in modo trasparente. Quindi per fare lo stesso in Azure è sufficiente impostare due Impostazioni applicazione nel pannello AppSettings:
Security:Authentication:UserName a_user_name
Security:Authentication:Password a_user_password
Modello di opzione e configurazione
Quando si ha a che fare con grandi insiemi di valori di configurazione, potrebbe essere piuttosto difficile caricarli uno per uno.
Opzione modello che viene fornito con asp.net offre un modo conveniente per mappare una section
ad un dotnet poco
: per esempio, si potrebbe idratare StorageOptions
direttamente da una sezione di configurazione b aggiungendo Microsoft.Extensions.Options.ConfigurationExtensions
pacchetto e chiamando il Configure<TOptions>(IConfiguration config)
metodo di estensione.
services.Configure<StorageOptions>(Configuration.GetSection("Storage"));
Nella fonte di configurazione della memoria
È anche possibile creare la configurazione da un oggetto in memoria come un Dictionary<string,string>
.AddInMemoryCollection(new Dictionary<string, string>
{
["akey"] = "a value"
})
Questo può rivelarsi utile in scenari di test di integrazione / unità.