Microsoft.Extensions.Configuration.ConfigurationBuilder は、
アプリケーション設定を「さまざまなソース」から読み込み、1つの設定オブジェクトとして統合するための仕組み
です。もともとは ASP.NET Core 用に設計されましたが、現在はコンソールアプリや Worker Service、WinForms / WPF でも普通に使われています。
ConfigurationBuilder の概要
ConfigurationBuilder は
- JSON
- 環境変数
- コマンドライン引数
- INI ファイル
- メモリ上の値
- Azure App Configuration など
といった 複数の設定ソースを合成するためのビルダーです。
最終的に IConfiguration を生成します。
ConfigurationBuilder の位置づけ (というか役回り)
ConfigurationBuilder は
- 設定を「保存するクラス」ではない
- 設定を「読み込んで統合するクラス」
です。つまり
- JSONシリアライズ用クラスではありません。
保存処理(Write)は標準では提供されません。 読み取り専用に近い設計です。
テストコード
// 設定ファイルの使用例
Console.WriteLine("\n=== Microsoft.Extensions.Configuration の使用例 ===");
// ConfigurationBuilderを使ってappsettings.jsonから設定を読み込む
var configuration = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
// 方法1: 個別の値を取得
Console.WriteLine("\n[方法1: 個別の値を取得]");
var theme = configuration["AppSettings:Theme"];
var fontSize = configuration["AppSettings:FontSize"];
Console.WriteLine($"Theme: {theme}");
Console.WriteLine($"FontSize: {fontSize}");
// 方法2: セクションを取得
Console.WriteLine("\n[方法2: セクションを取得]");
var appSettingsSection = configuration.GetSection("AppSettings");
Console.WriteLine($"Theme: {appSettingsSection["Theme"]}");
Console.WriteLine($"FontSize: {appSettingsSection["FontSize"]}");
Console.WriteLine($"EnableNotifications: {appSettingsSection["EnableNotifications"]}");
// 方法3: 強く型付けされたオブジェクトにバインド(推奨)
Console.WriteLine("\n[方法3: 強く型付けされたオブジェクトにバインド]");
var settings = appSettingsSection.Get<AppSettingsStore.SettingsDto>();
if (settings != null)
{
Console.WriteLine($"Theme: {settings.Theme}");
Console.WriteLine($"FontSize: {settings.FontSize}");
Console.WriteLine($"EnableNotifications: {settings.EnableNotifications}");
}
// 注意: Microsoft.Extensions.Configurationは読み込み専用
// 設定を保存するには、引き続きJsonSerializerを使う
Console.WriteLine("\n[設定の保存には JsonSerializer を使用]");
var appSettingsStore = new AppSettingsStore("SampleJson");
var currentSettings = appSettingsStore.Load();
Console.WriteLine($"Current saved settings - Theme: {currentSettings.Theme}, FontSize: {currentSettings.FontSize}");
参考サイト
ConfigurationBuilder Class (Microsoft.Extensions.Configuration) | Microsoft Learn
https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.configurationbuilder?view=net-10.0-pp