.NET Core から使われているConfigurationBuilder
で、コンフィグレーションを環境変数、appsettings.json
の順番で読み込みたいというニーズがあったので、簡単なサンプルを作って検証した。
事前準備
ConfigurationBuilder
をインストールするには下記のライブラリが必要
- Microsoft.Extensions.Configuration
さらに、環境変数、Jsonの設定ファイルを使いたい時は次のものが必要です。他のプロバイダもあるので、これ以外に使いたかったら検索するとよいと思います。
- Microsoft.Extensions.Configuration.EnvironmentVariables
- Microsoft.Extensions.Configuration.Json
nuget パッケージをインストールしておきましょう。
環境変数と、appsettings.jsonの設定
テスト用に、環境変数と、appsettings.json
作成します。 環境変数のみのパターン、重複しているパターン、ファイルのみのパターンでデータを作っています。
環境変数
// Only Environment Variables has been set
Environment.SetEnvironmentVariable("SOME_PRIMARY_KEY", "EnvironmentVariablesKey");
// Evirnoment Variables and appsettings has been set
Environment.SetEnvironmentVariable("SOME_HOST_NAME", "EnvironmentVariablesHostName");
appsettings.json
{
"SOME_HOST_NAME": "AppSettingsHostName",
"SOME_SECRET": "AppSettingsSecret"
}
ちなみに、コンフィグファイルを VS に含めるときは、Property > Advanced > Copy to Output Directory
が Copy always
になっているようにすること。そうでないと実行ディレクトリに該当ファイルがコピーされません。
Builder を使用する
Builderの使用は単純に New をして、読み込みたいコンフィグレーションを足していくだけです。インターフェイスがあるので、そちらで受けるようにしておきました。すると、テストが楽になりそうですね。
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json");
builder.AddEnvironmentVariables();
var configration = builder.Build();
あとは使うだけです。
Console.WriteLine($"SOME_PRIMARY_KEY: {configration["SOME_PRIMARY_KEY"]}");
Console.WriteLine($"SOME_HOST_NAME: {configration["SOME_HOST_NAME"]}");
Console.WriteLine($"SOME_SECRET: {configration["SOME_SECRET"]}");
実行結果
ちなみに、後から足したソースで上書きされるようですね。無ければ、最初のものがセットされます。これは便利。
SOME_PRIMARY_KEY: EnvironmentVariablesKey
SOME_HOST_NAME: EnvironmentVariablesHostName
SOME_SECRET: AppSettingsSecret