首頁 > 軟體

ASP.NET Core讀取組態檔

2022-02-23 10:00:49

ASP.NET Core 中,可以使用 ConfigurationBuilder 物件來構建。

主要分為三部:設定資料來源 -> ConfigurationBuilder -> 使用。

資料來源可來自字典或組態檔。

資料來源要麼繼承 IConfigurationSource ,要麼從組態檔中讀取。

1,來自字典

我們先使用字典儲存鍵值對,來設定設定, test = 設定,然後使用 ConfigurationBuilder.Add() 方法新增資料來源, Add 方法可以新增繼承了 IConfigurationSource的資料來源。

MemoryConfigurationSource 繼承了 IConfigurationSource ,使用字典作為資料來源。

            var dic = new Dictionary<string, string>()
            {
                ["test"] = "設定"
            };
            var config = new ConfigurationBuilder()
                .Add(new MemoryConfigurationSource() { InitialData = dic }).Build();
            string test = config["test"];

老是 new 不太爽,可以使用下面的方法來讀取字典中的資料來源:

            var dic = new Dictionary<string, string>()
            {
                ["test"] = "設定"
            };
            var config = new ConfigurationBuilder()
                .AddInMemoryCollection(dic)
                .Build();
            string test = config["test"];

2,來自組態檔

假如在 專案根目錄下建立一個 json 檔案,內容如下:

{
"test":"設定"
}

那麼可以這樣讀取設定:

            var config = new ConfigurationBuilder()
                .AddJsonFile("test.json")
                .Build();
            string test = config["test"];
            Console.WriteLine(test);

如果組態檔不在根目錄下,則可以使用 SetBasePath() 來定義路徑,範例如下:

            var config = new ConfigurationBuilder()
                .SetBasePath("E:\test\aaa")
                .AddJsonFile("test.json")
                .Build();

上面看到,獲取設定項是非常簡單的, config["{KeyName}"] 即可獲得 value

另外,可以監控 json 檔案,當 json 檔案發生更改時,主動更新。

                config.AddJsonFile("appsettings.json", 
                    optional: true, 
                    reloadOnChange: true);

3,層次結構

設定資料來源可以有層次結構。

ASP.NET Core 中,都會有個 appsettings.json 檔案,其內容如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

那麼我們使用時,可以使用 : 符號獲取下一層子項的設定。

            var config = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .Build();

            string test = config["Logging:LogLevel:Default"];

如果你只想 獲取 json 檔案中 LogLevel 部分的設定,可以使用 GetSection() 方法。

            var config = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .Build()
                .GetSection("Logging:LogLevel");

            string test = config["Default"];

通過 json 組態檔,我們可以很方便地構建層級結構的設定,如果想在字典中儲存,可以使用 "{k1}:{k2}" 這種形式存。例如:

            var dic = new Dictionary<string, string>()
            {
                ["testParent:Child1"] = "6",
                ["testParent:Child2"] = "666"
            };
            var config = new ConfigurationBuilder()
                .AddInMemoryCollection(dic)
                .Build().GetSection("testParent");

            string test = config["Child1"];

4,對映

我們可以使用 Get<>() 方法,將設定對映為物件。

    public class TestOptions
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    }
            var dic = new Dictionary<string, string>()
            {
                ["A"] = "6",
                ["B"] = "66",
                ["C"] = "666"
            };
            TestOptions config = new ConfigurationBuilder()
                .AddInMemoryCollection(dic)
                .Build().Get<TestOptions>();

到此這篇關於ASP.NET Core讀取組態檔的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com