配置文件
添加配置文件
在项目目录下有个 appsettings.json ,我们先来操作这个文件。
在appsettings.json 添加如下两个节点。
{
"Data": "LineZero",
"ConnectionStrings": {
"DefaultConnection": "数据库1",
"DevConnection": "数据库2"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
读取配置文件
配置文件的读取都是通过一个Configuration对象来读取。具体来说,Configuration对象实际指ConfigurationRoot和ConfigurationSection两个类型。配置文件中根节点所在的Configuration对象被称为ConfigurationRoot,除此之外的其他Configuration对象则被称为ConfigurationSection,配置模型分别定义了接口IConfigurationRoot和IConfigurationSection来表示它们,这两个接口都是IConfiguration的继承者
Configuration对象是由ConfigurationBuilder创建的,
而原始的配置信息来源是通过ConfigurationSource获取的的,
所以读取配置信息时首先需要一个 ConfigurationRoot对象,所以读取过程是:先创建一个ConfigurationBuilder对象,在ConfigurationBuilder对象上添加或者注册数据源 ConfigurationSource(可以注册一个或者多个), 最后调用Buid()方法,来实现我们需要的Configuration对象的一个实例。
即:
IConfiguration config = new ConfigurationBuilder()
//注册一个或者多个ConfigurationSource对象,在此注册一个内存配置来源
.Add(
……
).Build(); //通过Buid()方法,创建 Configuration对象
注册多个配置来源
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(dict);//内存配置源
builder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");//注册当前路径下的配置源
控制台读取配置文件**
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
Console.WriteLine($"Name = {Configuration["Data"]}");
Console.WriteLine($"hold:ceshi = {Configuration["hold:ceshi"]}");
Console.WriteLine($"ConnectionStrings:NetCoreForWebContext={Configuration["ConnectionStrings:NetCoreForWebContext"]}");
Console.WriteLine($"Logging:LogLevel:Default={Configuration["Logging:LogLevel:Default"]} ");
Console.WriteLine($"Logging:IncludeScopes={Configuration["Logging:IncludeScopes"]} ");
Console.WriteLine($"list:NUM={Configuration["list:NUM"]} ");
Console.WriteLine($"list:Age={Configuration["list:Age"]} ");
Configuration["list:Age"] = "99";//并不能更新配置文件
Console.WriteLine($"list:Age={Configuration["list:Age"]} ");
控制器中读取
Asp.net框架默认添加了IConfiguration的依赖注入
public class MoviesController : Controller
{
public IConfiguration Configuration { get; }
public MoviesController(IConfiguration configuration)
{
Configuration = configuration;
}
}
对象读取
我们在appsettings.json 都添加一个 SiteConfig 节点。
"SiteConfig": {
"Name": "LineZero's Blog",
"Info": "ASP.NET Core 开发及跨平台,配置文件读取"
},
然后新建一个SiteConfig 类。
public class SiteConfig
{
public string Name { get; set; }
public string Info { get; set; }
}
首先在 ConfigureServices 中添加Options 及对应配置。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOptions(); services.Configure<SiteConfig>(Configuration.GetSection("SiteConfig"));
}
然后我们在 Controller 中读取。
public class HomeController : Controller
{
public SiteConfig Config;
public HomeController(IOptions<SiteConfig> option)
{
Config = option.Value;
}
public IActionResult Index()
{
return View(Config);
}
}
自定义配置文件
添加一个配置文件appSetting.Development.json并修改program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration(config => {
config.AddJsonFile("appSetting.Development.json");
}).UseStartup<Startup>();
多环境配置文件
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((context,config) => {
config.AddJsonFile($"appSetting.{context.HostingEnvironment.EnvironmentName}.json");
}).UseStartup<Startup>();