正如我的第一篇文章ASP.NET 5 (vNext) 理解和概述 所说,ASP.NET 5的具有全新的配置机制,我们可以通过以下几点来进行理解:
首先我们在项目的根目录加入自定义的配置文件,config.json和config.ini (这里的文件名是可以任意定义的).
Config.json的内容我们模拟如下
{
"AppSettings": {
"SiteTitle": "ASP.NET 5 Sample"
},
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=ASPNET5;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
}
Config.Ini的内容我们模拟如下:
DefaultPage=index.html
之前也曾经提过,我们一般通过Startup类的构造函数来加载配置文件. Startup类的配置文件一般这样定义.
public Startup(IHostingEnvironment env)
{
}
在最小模板,如果读取Json和ini文件,我们需要加入ConfigurationModel.Json的组件:

然后我们可以加入下面的代码来读取任意json文件,ini文件和系统环境变量
public Startup(IHostingEnvironment env)
{
// 加载自定义的Json配置文件和INI配置文件
var configuration = new Configuration()
.AddJsonFile("config.json")
.AddIniFile("config.ini");
//加入系统的环境变量
configuration.AddEnvironmentVariables();
}
加载完毕以后,利用上述代码中产生的configuration变量就能很方便的读取各种配置信息,这里提醒下,在以对象结构保存的配置信息中, Configuration类用”:”来实现对对象属性的导航,不太理解的可以看下面的代码:
//尝试输出一些配置信息
//对应config.json的Data.DefaultConnection.ConnectionString
Console.WriteLine(configuration["Data:DefaultConnection:ConnectionString"]);
//对应config.ini的DefaultPage
Console.WriteLine(configuration["DefaultPage "]);
//对应系统环境里面的Path
Console.WriteLine(configuration["Path"]);
在Startup类中,我们可以很方便的通过一个成员变量来传递的configuration变量,比较常见的写法可以类似下面的代码
private IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
// 加载自定义的Json配置文件和INI配置文件
var configuration = new Configuration()
.AddJsonFile("config.json")
.AddIniFile("config.ini");
//加入系统的环境变量
configuration.AddEnvironmentVariables();
//赋值给成员变量
Configuration = configuration;
}
但如果在整个项目中,就需要利用依赖注入技术把配置信息装载到环境容器中去,才能在整个项目中被灵活的调用.
在我前一篇博文关于启动类的描述中,曾经提及 Startup的ConfigureServices函数就是负责装载所有依赖注入服务的函数,所以我们需要在那里加入装载代码:
public void ConfigureServices(IServiceCollection services)
{
//把Configuration对象放入服务容器
services.AddInstance(typeof(IConfiguration), Configuration);
}
注意这里的Configration是成员变量.
如何在项目的其他地方使用配置信息呢? 针对ASP.NET 5的依赖注入方式,我们一般有2种选择.
这里我们还没有加载MVC或者EF,我们就以Startup类的Configure函数来做一个示范:
第一种模式代码示例:
public void Configure(IApplicationBuilder app,IConfiguration configuration)
{
//从当前容器中读出配置信息
Console.WriteLine(configuration["DefaultPage"]);
Console.WriteLine(configuration["AppSettings:SiteTitle"]);
}
注意, IConfiguration configuration参数的隐式 转换是因为之前我们已经把Configuration加入Service容器. 如果没有之前的注册,这里的代码会报错.
第二种模式代码示例:
public void Configure(IApplicationBuilder app)
{
var configuration = (IConfiguration)app.ApplicationServices.GetService(typeof(IConfiguration));
//从当前容器中读出配置信息
Console.WriteLine(configuration["DefaultPage"]);
Console.WriteLine(configuration["AppSettings:SiteTitle"]);
}
原文:http://www.cnblogs.com/Leo_wl/p/4507204.html