設定ファイルを用意することがある。
ASP.NET CoreのコンフィグはMicrosoft.Extensions.Configuration
として個別に使えるので、それを頼る。
なので、参照するドキュメントはこちら
サンプルコード
ConfigurationBuilder
を構築して設定値を読み取る。
using System;
using Microsoft.Extensions.Configuration;
namespace MicrosoftExtensionsTest
{
class Program
{
static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appconfig.json")
.Build();
Console.WriteLine(config["root"]);
Console.WriteLine(config["setting:A:value"]);
Console.WriteLine(config["setting:A:B:value"]);
Console.WriteLine(config["setting:A:B:C:value"]);
Console.WriteLine(config["setting:A:B:C:D:value"]);
}
}
}
上のコードでは、実行ファイルと同じディレクトリに存在するappconfig.jsonという名前のファイルから設定値を読み出し、プログラム内で参照している。
appconfig.jsonの内容は以下の通り。
{
"root" : "hello",
"setting" : {
"A" : {
"B" : {
"C" : {
"D" : {
"value" : "ddd"
},
"value" : "ccc"
},
"value" : "bbb"
},
"value" : "aaa"
}
}
}
簡単に解説
まず必要なパッケージをNugetするのだが、Microsoft.Extensions.Configuration.*
全てが要るわけではなく、提供されている設定手段のうち使うものだけをインストールすればよい。
Microsoft.Extensions.Configuration
が必須で、サンプルコードのようにファイルベースの設定をする場合はFileExtensions
が必要。さらに、Jsonを設定ファイルとして使うのであれJson
が要る。という感じ。
他には、コマンドラインから値を取得したり、設定値をBindできたり(データクラス通りに値が割り当てられインストタンス生成されるアレ)する。
ファイルで設定するとき、SetBasePath()
でルートディレクトリを指定し、そこからの相対パスをAddxxxFile()
していく。設定はいくらでも追加できるが、同じ設定値があった場合は後ろのほうが優先される(上書きされる)。
そして、読み出した値はディクショナリっぽく参照できる。
とても簡単に思える。
その他
AppContext.BaseDirectory
というのは、そのDLL/実行ファイルがあるディレクトリを指す(はず)。