问题描述
在ASP.NET Core应用程序开发中,比如有一个名为Config.json的配置文件,配置项为:
{
"AppSettings": {
"token": "1234"
}
}
与ASP.NET 读取配置文件不同,我们不能再使用类似:
System.Configuration.ConfigurationManager.AppSettings["token"];
的方式来读取配置文件中的配置数据了。那么,在ASP.NET Core中应该如何读取配置文件中的数据呢?
方案一
在ASP.NET Core 2.0及以上版本中,我们可以在Startup.cs
文件中注册Configuration
的实例,然后在需要的地方读取,假如我们有一个名为appsettings.json
的配置文件,如下:
{
"MyConfig": {
"ApplicationName": "MyApp",
"Version": "1.0.0"
}
}
然后定义一个与MyConfig
配置节点对应的实体类:
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();
}
}
如果我们还需要将配置文件注入到控制器中,我们还需要通过Startup.cs
的ConfigureServices()
方法注册运行时服务,如:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOptions();
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()
{
var myConfig = config.Value;
return View();
}
}
完整的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();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOptions();
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}
}
方案二
在Startup.cs
启动类中注册单例的IConfiguration
服务,如下:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfiguration>(Configuration);
}
控制器调用示例:
public class HomeController : Controller
{
readonly IConfiguration _configuration;
public HomeController(IConfiguration configuration)
{
_configuration = configuration;
}
public IActionResult Index()
{
var applicationName = _configuration["MyConfig:ApplicationName"].Value;
return View();
}
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册