使用 Configuration Package

在實務上不少資訊我們不想寫死在 code 中,會以 config 形式由 client 設定,目前最主流的 config 就屬 JSON 格式,.NET 也提供了 ConfigurationBuilder ,讓我們輕易的讀取 JSON 格式的 config 檔。

Version


macOS High Sierra 10.13.6
.NET Core 2.1
C# 7.2
Rider 2018.1.3

安裝 Package


config000

要另外安裝 3 個 package :

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json

ConfigurationBuilder


Config.json

1
2
3
{
"Name": "Sam"
}

假設 config.json 放在 project 的根目錄下,想要讀取 key 為 Name 的 value。

Program.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.IO;
using Microsoft.Extensions.Configuration;

namespace ConsoleApp
{
static class Program
{
private static void Main()
{

var currentDirectory = Directory.GetCurrentDirectory();

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

Console.WriteLine(config["Name"]);
}
}
}

11 行

1
var currentDirectory = Directory.GetCurrentDirectory();

使用 Directory.GetCurrentDirectory() 讀取目前 project 的根目錄。

14 行

1
2
new ConfigurationBuilder()
.SetBasePath(currentDirectory)

建立 ConfigurationBuilder,並由 SetBasePath() 設定其 working directory。

16 行

1
.AddJsonFile("config.json")

AddJsonFile() 設定 config 檔案。

17 行

1
.Build();

最後由 Build() 建立 config 物件。

19 行

1
Console.WriteLine(config["Name"]);

由於 IConfiguration 有定義 indexer,因此我們可以 Name 當 key 直接存取。

Conclusion


  • 使用 ConfigurationBuilder 讓我們可以很簡單地讀取 JSON 格式的 config 檔

Sample Code


完整的範例可以在我的 GitHub 上找到

2018-07-31