ASP.NET Core 中的配置

.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

參考

相關文章
相關標籤/搜索