asp.net-core
Configuración
Buscar..
Introducción
El núcleo de Asp.net proporciona abstracciones de configuración. Le permiten cargar ajustes de configuración de varias fuentes y construir un modelo de configuración final que luego puede ser consumido por su aplicación.
Sintaxis
-
IConfiguration
-
string this[string key] { get; set; }
-
IEnumerable<IConfigurationSection> GetChildren();
-
IConfigurationSection GetSection(string key);
Acceso a la configuración mediante la inyección de dependencias
El enfoque recomendado sería evitar hacerlo y, más bien, utilizar IOptions<TOptions>
e IServiceCollection.Configure<TOptions>
.
Dicho esto, esto todavía es bastante sencillo para hacer que IConfigurationRoot
esté disponible en toda la aplicación.
En el constructor Startup.cs, debe tener el siguiente código para construir la configuración,
Configuration = builder.Build();
Aquí la Configuration
es una instancia de IConfigurationRoot
, y agrega esta instancia como Singleton a la colección de servicios en el método ConfigureServices, Startup.cs,
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfigurationRoot>(provider => Configuration);
Por ejemplo, ahora puede acceder a la configuración en un Controlador / Servicio
public MyController(IConfigurationRoot config){
var setting1= config.GetValue<string>("Setting1")
}
Empezando
En este ejemplo, describiremos lo que sucede cuando subyace un nuevo proyecto.
En primer lugar, se agregarán las siguientes dependencias a su proyecto (actualmente el archivo project.json
):
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
También creará un constructor en su archivo Startup.cs
que se encargará de construir la configuración utilizando la API fluida de ConfigurationBuilder
:
- Primero crea un nuevo
ConfigurationBuilder
. - A continuación, establece una ruta base que se utilizará para calcular la ruta absoluta de otros archivos.
- Agrega un
appsettings.json
opcional al generador de configuración y monitorea sus cambios - Agrega un archivo de configuración
appsettings.environementName.json
relacionado con el entorno opcional - A continuación, añade variables de entorno.
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(); }
Si se establece una misma configuración en varias fuentes, se ganará la última fuente agregada y se seleccionará su valor.
La configuración puede entonces ser consumida usando la propiedad del indexador. Los dos puntos :
carácter sirve un delimitador de camino.
Configuration["AzureLogger:ConnectionString"]
Esto buscará un valor de configuración ConnectionString
en una sección de AzureLogger
.
Trabajar con variables de entorno
Puede obtener la configuración de las variables de entorno llamando a .AddEnvironmentVariables()
en su ConfigurationBuilder
.
APPSETTING_
variables de entorno con el prefijo APPSETTING_
A continuación, utilizará dos puntos :
como el separador de ruta clave.
Esto significa que: siguientes ajustes de entorno:
APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password
Será el equivalente a este json:
{
"Security" : {
"Authentication" : {
"UserName" : "a_user_name",
"Password" : "a_user_password"
}
}
}
** Tenga en cuenta que el Servicio de Azure transmitirá la configuración como variables de entorno. Prefijo se establecerá para usted de forma transparente. Entonces, para hacer lo mismo en Azure, simplemente configure dos Configuraciones de aplicaciones en la hoja de Configuración de aplicaciones:
Security:Authentication:UserName a_user_name
Security:Authentication:Password a_user_password
Opción modelo y configuración
Cuando se trata de grandes conjuntos de configuración de valor, puede resultar poco práctico cargarlos uno compre uno.
El modelo de opción que viene con asp.net ofrece una manera conveniente de asignar una section
a una dotnet poco
: por ejemplo, uno podría hidratar las StorageOptions
directamente desde una sección de configuración b agregando Microsoft.Extensions.Options.ConfigurationExtensions
y llamando al Configure<TOptions>(IConfiguration config)
Método de extensión Configure<TOptions>(IConfiguration config)
.
services.Configure<StorageOptions>(Configuration.GetSection("Storage"));
En la fuente de configuración de memoria
También puede generar la configuración desde un objeto en memoria, como un Dictionary<string,string>
.AddInMemoryCollection(new Dictionary<string, string>
{
["akey"] = "a value"
})
Esto puede revelarse útil en escenarios de integración / pruebas de unidad.