Esto ha tenido algunos giros y vueltas. He modificado esta respuesta para estar al día con ASP.NET Core 2.0 (a partir del 26/02/2018).
Esto se toma principalmente de la documentación oficial :
Para trabajar con la configuración en su aplicación ASP.NET, se recomienda que solo cree una instancia Configuration
en la Startup
clase de su aplicación . Luego, use el patrón Opciones para acceder a configuraciones individuales. Digamos que tenemos un appsettings.json
archivo que se ve así:
{
"MyConfig": {
"ApplicationName": "MyApp",
"Version": "1.0.0"
}
}
Y tenemos un objeto POCO que representa la configuración:
public class MyConfig
{
public string ApplicationName { get; set; }
public int Version { get; set; }
}
Ahora construimos la configuración en Startup.cs
:
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}
}
Tenga en cuenta que appsettings.json
se registrará de forma predeterminada en .NET Core 2.0. También podemos registrar un appsettings.{Environment}.json
archivo de configuración por entorno si es necesario.
Si queremos inyectar nuestra configuración a nuestros controladores, necesitaremos registrarla con el tiempo de ejecución. Lo hacemos a través de Startup.ConfigureServices
:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add functionality to inject IOptions<T>
services.AddOptions();
// Add our Config object so it can be injected
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}
Y lo inyectamos así:
public class HomeController : Controller
{
private readonly IOptions<MyConfig> config;
public HomeController(IOptions<MyConfig> config)
{
this.config = config;
}
// GET: /<controller>/
public IActionResult Index() => View(config.Value);
}
La Startup
clase completa :
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add functionality to inject IOptions<T>
services.AddOptions();
// Add our Config object so it can be injected
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}
}