这有些曲折。我已修改此答案以使其与ASP.NET Core 2.0保持最新(截至2018年2月26日)。
这主要来自官方文档:
若要使用ASP.NET应用程序中的设置,建议仅Configuration
在应用程序的Startup
类中实例化一个。然后,使用“选项”模式访问各个设置。假设我们有一个appsettings.json
看起来像这样的文件:
{
"MyConfig": {
"ApplicationName": "MyApp",
"Version": "1.0.0"
}
}
我们有一个POCO对象代表配置:
public class MyConfig
{
public string ApplicationName { get; set; }
public int Version { get; set; }
}
现在,我们在中构建配置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();
}
}
请注意,默认情况下将在.NET Core 2.0中appsettings.json
进行注册。appsettings.{Environment}.json
如果需要,我们还可以为每个环境注册一个配置文件。
如果要将配置注入到控制器中,则需要在运行时注册它。我们通过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"));
}
我们像这样注入它:
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);
}
全Startup
类:
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"));
}
}