No busques más por otros sitios porque has llegado al espacio correcto, contamos con la solución que deseas pero sin complicarte.
Solución:
Programa y clase de inicio
.NET Core 2.x
No necesitas ser nuevo IConfiguration
en el Startup
constructor. Su implementación será inyectada por el sistema DI.
// Program.cs
public class Program
public static void Main(string[] args)
BuildWebHost(args).Run();
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
// Startup.cs
public class Startup
public IHostingEnvironment HostingEnvironment get; private set;
public IConfiguration Configuration get; private set;
public Startup(IConfiguration configuration, IHostingEnvironment env)
this.HostingEnvironment = env;
this.Configuration = configuration;
.NET Core 1.x
Tienes que decir Startup
para cargar los archivos de configuración de la aplicación.
// Program.cs
public class Program
public static void Main(string[] args)
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup()
.UseApplicationInsights()
.Build();
host.Run();
//Startup.cs
public class Startup
public IConfigurationRoot Configuration get; private set;
public Startup(IHostingEnvironment env)
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.env.EnvironmentName.json", optional: true)
.AddEnvironmentVariables();
this.Configuration = builder.Build();
...
Obtener valores
Hay muchas formas de obtener el valor que configura desde la configuración de la aplicación:
- Manera simple de usar
ConfigurationBuilder.GetValue
- Utilizando Patrón de opciones
Digamos tu appsettings.json
Se ve como esto:
"ConnectionStrings":
...
,
"AppIdentitySettings":
"User":
"RequireUniqueEmail": true
,
"Password":
"RequiredLength": 6,
"RequireLowercase": true,
"RequireUppercase": true,
"RequireDigit": true,
"RequireNonAlphanumeric": true
,
"Lockout":
"AllowedForNewUsers": true,
"DefaultLockoutTimeSpanInMins": 30,
"MaxFailedAccessAttempts": 5
,
"Recaptcha":
...
,
...
Manera simple
Puede inyectar toda la configuración en el constructor de su controlador / clase (a través de IConfiguration
) y obtenga el valor que desee con un key:
public class AccountController : Controller
private readonly IConfiguration _config;
public AccountController(IConfiguration config)
_config = config;
[AllowAnonymous]
public IActionResult ResetPassword(int userId, string code)
var vm = new ResetPasswordViewModel
PasswordRequiredLength = _config.GetValue(
"AppIdentitySettings:Password:RequiredLength"),
RequireUppercase = _config.GetValue(
"AppIdentitySettings:Password:RequireUppercase")
;
return View(vm);
Patrón de opciones
los ConfigurationBuilder.GetValue
funciona muy bien si solo necesita uno o dos valores de la configuración de la aplicación. Pero si desea obtener varios valores de la configuración de la aplicación, o no desea codificarlos key cadenas en varios lugares, podría ser más fácil de usar Patrón de opciones. El patrón de opciones usa clases para representar la jerarquía / estructura.
Para usar el patrón de opciones:
- Definir clases para representar la estructura.
- Registre la instancia de configuración a la que se unen esas clases
- Inyectar
IOptions
en el constructor del controlador / clase en el que desea obtener valores
1. Definir clases de configuración para representar la estructura.
Puede definir clases con propiedades que necesita coincidir exactamente los keys en la configuración de su aplicación. El nombre de la clase no tiene que coincidir con el nombre de la sección en la configuración de la aplicación:
public class AppIdentitySettings
public UserSettings User get; set;
public PasswordSettings Password get; set;
public LockoutSettings Lockout get; set;
public class UserSettings
public bool RequireUniqueEmail get; set;
public class PasswordSettings
public int RequiredLength get; set;
public bool RequireLowercase get; set;
public bool RequireUppercase get; set;
public bool RequireDigit get; set;
public bool RequireNonAlphanumeric get; set;
public class LockoutSettings
public bool AllowedForNewUsers get; set;
public int DefaultLockoutTimeSpanInMins get; set;
public int MaxFailedAccessAttempts get; set;
2. Registre la instancia de configuración
Y luego debe registrar esta instancia de configuración en ConfigureServices()
en la puesta en marcha:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
...
namespace DL.SO.UI.Web
public class Startup
...
public void ConfigureServices(IServiceCollection services)
...
var identitySettingsSection =
_configuration.GetSection("AppIdentitySettings");
services.Configure(identitySettingsSection);
...
...
3. Inyectar IOptions
Por último, en el controlador / clase que desea obtener los valores, debe inyectar IOptions
a través del constructor:
public class AccountController : Controller
private readonly AppIdentitySettings _appIdentitySettings;
public AccountController(IOptions appIdentitySettingsAccessor)
_appIdentitySettings = appIdentitySettingsAccessor.Value;
[AllowAnonymous]
public IActionResult ResetPassword(int userId, string code)
var vm = new ResetPasswordViewModel
PasswordRequiredLength = _appIdentitySettings.Password.RequiredLength,
RequireUppercase = _appIdentitySettings.Password.RequireUppercase
;
return View(vm);
Simplemente cree un archivo AnyName.cs y pegue el siguiente código.
using System;
using System.IO;
using Microsoft.Extensions.Configuration;
namespace Custom
static class ConfigurationManager
public static IConfiguration AppSetting get;
static ConfigurationManager()
AppSetting = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("YouAppSettingFile.json")
.Build();
Debe reemplazar el nombre de archivo YouAppSettingFile.json con su nombre de archivo.
Su archivo .json debería verse como a continuación.
"GrandParent_Key" :
"Parent_Key" :
"Child_Key" : "value1"
,
"Parent_Key" :
"Child_Key" : "value2"
,
"Child_Key" : "value3"
Ahora puedes usarlo.
No te olvides de Añadir referencia en tu clase donde quieras usar.
using Custom;
Código para recuperar valor.
string value1 = ConfigurationManager.AppSetting["GrandParent_Key:Parent_Key:Child_Key"];
string value2 = ConfigurationManager.AppSetting["Parent_Key:Child_Key"];
string value3 = ConfigurationManager.AppSetting["Child_Key"];
Añadiendo a la respuesta de David Liang para Núcleo 2.0 –
appsettings.json
los archivos están vinculados a ASPNETCORE_ENVIRONMENT
variable.
ASPNETCORE_ENVIRONMENT
se puede establecer en cualquier valor, pero el marco admite tres valores: Development
, Staging
, y Production
. Si ASPNETCORE_ENVIRONMENT
no está configurado, será predeterminado Production
.
Para estos tres valores estos appsettings.ASPNETCORE_ENVIRONMENT.json los archivos son compatibles desde el primer momento – appsettings.Staging.json
, appsettings.Development.json
y appsettings.Production.json
Los tres archivos json de configuración de aplicaciones anteriores se pueden usar para configurar múltiples entornos.
Ejemplo – appsettings.Staging.json
"Logging":
"IncludeScopes": false,
"LogLevel":
"System": "Information",
"Microsoft": "Information"
,
"MyConfig": "My Config Value for staging."
Usar Configuration["config_var"]
para recuperar cualquier valor de configuración.
public class Startup
public Startup(IHostingEnvironment env, IConfiguration config)
Environment = env;
Configuration = config;
var myconfig = Configuration["MyConfig"];
public IConfiguration Configuration get;
public IHostingEnvironment Environment get;
Si haces scroll puedes encontrar las observaciones de otros usuarios, tú también tienes la habilidad insertar el tuyo si te apetece.