ASP.NET Core 获取配置项
在 ASP.NET Core 应用中,已无法通过 ConfigurationManager.AppSettings 中获取配置项,另外 ASP.NET Core 也不建议将配置项写在web.config中,而是记在appsettings.json,本文将介绍在 ASP.NET Core 获取配置项的方式
定义一个包含配置项的类,Configuration/DemoSettings.cs
public class DemoSettings
{
public string MainDomain { get; set; }
public string SiteName { get; set; }
}
appsettings.json 内容如下:
{
"DemoSettings": {
"MainDomain": "http://www.mysite.com",
"SiteName": "My Main Site"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
然后,回到Startup.cs文件
配置Services
Startup.cs类是定义应用程序所有设置的地方,无论是SQL Server,Mvc,还是Server端服务,其中 ConfigureServices 方法如下:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
}
需要增加以下配置:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
// Added - uses IOptions<T> for your settings.
services.AddOptions();
// Added - Confirms that we have a home for our DemoSettings
services.Configure<DemoSettings>(Configuration.GetSection("DemoSettings"));
}
AddOptions()方法是为允许IOptions
注入(Injecting) 配置项
在Controller中,如果想要获取配置项,需要准备两件事,一是承接配置的属性(property),二是实现构造注入
Controllers/HomeController.cs
public class HomeController : Controller
{
private DemoSettings ConfigSettings { get; set; }
public HomeController(IOptions<DemoSettings> settings)
{
ConfigSettings = settings.Value;
}
public IActionResult Index()
{
ViewData["SiteName"] = ConfigSettings.SiteName;
return View();
}
}