Isso teve algumas reviravoltas. Modifiquei esta resposta para estar atualizado com o ASP.NET Core 2.0 (a partir de 26/02/2018).
Isso é extraído principalmente da documentação oficial :
Para trabalhar com configurações no seu aplicativo ASP.NET, é recomendável que você instancie apenas um Configuration
na Startup
classe do seu aplicativo . Em seguida, use o padrão Opções para acessar configurações individuais. Digamos que temos um appsettings.json
arquivo parecido com este:
{
"MyConfig": {
"ApplicationName": "MyApp",
"Version": "1.0.0"
}
}
E nós temos um objeto POCO representando a configuração:
public class MyConfig
{
public string ApplicationName { get; set; }
public int Version { get; set; }
}
Agora criamos a configuração em 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();
}
}
Observe que appsettings.json
será registrado por padrão no .NET Core 2.0. Também podemos registrar um appsettings.{Environment}.json
arquivo de configuração por ambiente, se necessário.
Se queremos injetar nossa configuração em nossos controladores, precisamos registrá-la no tempo de execução. Fazemo-lo atravé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"));
}
E injetamos assim:
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);
}
A Startup
classe 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"));
}
}