目錄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