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 :

  1. Primero crea un nuevo ConfigurationBuilder .
  2. A continuación, establece una ruta base que se utilizará para calcular la ruta absoluta de otros archivos.
  3. Agrega un appsettings.json opcional al generador de configuración y monitorea sus cambios
  4. Agrega un archivo de configuración appsettings.environementName.json relacionado con el entorno opcional
  5. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow