目录html
.NET Core 定义配置的方式不一样于以前 NET 版本,以前是依赖于 System.Configuration 的 app.config 和 XML 配置文件 web.config。 新的配置系统更加轻量级,而且具备更好的扩展性,其最大的特色就是支持多样化的数据源。咱们能够采用文件格式(INI、JSON 或 XML),也能够使用内存的变量做为配置的数据源,或直接配置定义在持久化的文件甚至数据库中。web
新建一个 ASP .NET Core Web 应用程序,修改appsettings.json为:数据库
{ "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*", "option1": "value1_from_json", "option2": 2, "subsection": { "suboption1": "subvalue1_from_json", "suboption2": "subvalue2_from_json" }, "wizards": [ { "Name": "Gandalf", "Age": "1000" }, { "Name": "Harry", "Age": "17" } ], "EnvConfig": "Production" }
在ConfigureServices方法里面添加以下测试代码:json
//直接访问,节点由冒号(:)分隔 var option1 = Configuration["option1"]; var suboption1 = Configuration["subsection:suboption1"]; var wizards_0 = Configuration["wizards:0:Name"]; Console.WriteLine($"option1: {option1}"); Console.WriteLine($"subsection:suboption1: {suboption1}"); Console.WriteLine($"wizards:0:Name: {wizards_0}");
查看输出:app
TestConfigration> option1: value1_from_json TestConfigration> subsection:suboption1: subvalue1_from_json TestConfigration> wizards:0:Name: Gandalf
修改更改appsettings.Development.json为:测试
{ "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "EnvConfig": "Development" }
注意EnvConfig的配置值为Development。ui
在ConfigureServices方法里面添加以下测试代码:code
//多环境配置 var envConfig = Configuration["EnvConfig"]; Console.WriteLine($"EnvConfig: {envConfig}");
Debug执行获取的是appsettings.Development.json里面的值,输出orm
EnvConfig: Development
直接执行获取的是appsettings.json里面的值,输出htm
EnvConfig: Production
多坏境配置文件获取代码位于Program类中的WebHost.CreateDefaultBuilder方法里:
IHostingEnvironment hostingEnvironment = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
添加一个类 TestSubSectionConfig 对应于配置文件中的 subsection 节点
public class TestSubSectionConfig { public string SubOption1 { get; set; } public string SubOption2 { get; set; } }
在ConfigureServices方法里面添加以下测试代码:
//使用GetSection解析配置文件的节 var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>(); var suboption2 = subsectionOptions.SubOption2; Console.WriteLine($"subsection:suboption2: {suboption2}");
查看输出:
subsection:suboption2: subvalue2_from_json
若是须要在Controller里面使用,能够经过依赖注入的方式:
在ConfigureServices里面注册配置项。
public void ConfigureServices(IServiceCollection services) { //注册配置到服务容器 services.Configure<TestSubSectionConfig>(Configuration.GetSection("subsection")); //var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>(); //services.Configure<TestSubSectionConfig>(options => //{ // options.SubOption1 = subsectionOptions["suboption1"]; // options.SubOption2 = subsectionOptions["suboption2"]; // }); }
在Controller里面读取:
public class HomeController : Controller { private TestSubSectionConfig _subSectionConfig; private ILogger<HomeController> _logger; public HomeController(IOptions<TestSubSectionConfig> option, ILogger<HomeController> logger) { _subSectionConfig = option.Value; _logger = logger; } public IActionResult Index() { _logger.LogInformation($"SubOption1: {_subSectionConfig.SubOption1}"); _logger.LogInformation($"SubOption2: {_subSectionConfig.SubOption2}"); return View(); } }
查看输出:
TestConfigration.Controllers.HomeController:Information: SubOption1: subvalue1_from_json TestConfigration.Controllers.HomeController:Information: SubOption2: subvalue2_from_json