ここでは、.NET Coreでのさまざまな構成手法について説明します。それぞれの方法を例示し、それらがどのように動作するかを示します。
メモリベースの設定
メモリ上にKey-Value形式でデータを保持する設定です。
static void MemorySetting()
{
var initialData = new Dictionary<string, string?>
{
{ "user", "alice" }
};
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(initialData)
.Build();
Console.WriteLine($"User: {configuration["user"]}");
}
呼び出し例:
static void Main(string[] args)
{
MemorySetting();
}
既存の設定プロバイダを使用する
Microsoft.Extensions.Configurationライブラリには、既存のIConfigurationRootを新しい設定としてラップする機能があります。
static void LinkedSetting()
{
var initialData = new Dictionary<string, string?>
{
{ "user", "alice" }
};
// 初期設定を作成
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(initialData)
.Build();
// 新しい設定を作成
var newConfiguration = new ConfigurationBuilder()
.AddConfiguration(configuration)
.Build();
Console.WriteLine($"User: {newConfiguration["user"]}");
}
コマンドラインからの設定
コマンドライン引数から設定値を取得できます。
static void CommandLineSetting()
{
var configuration = new ConfigurationBuilder()
.AddCommandLine(new[] { "user=alice", "level=expert" })
.Build();
Console.WriteLine($"User: {configuration["user"]}");
}
環境変数からの設定
環境変数をフィルタリングして設定に取り込むことができます。
static void EnvironmentSetting()
{
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables("MYAPP_")
.Build();
Console.WriteLine($"User: {configuration["MYAPP_User"]}");
}
JSONファイルからの設定
JSON形式の設定ファイルからデータを読み込みます。
static void JsonFileSetting()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("settings.json", optional: true, reloadOnChange: true)
.Build();
Console.WriteLine($"User: {configuration["user"]}");
}
settings.jsonの内容:
{
"user": "alice",
"level": "expert"
}
XMLファイルからの設定
XML形式の設定ファイルもサポートされています。
static void XmlFileSetting()
{
var configuration = new ConfigurationBuilder()
.AddXmlFile("config.xml", optional: true, reloadOnChange: true)
.Build();
Console.WriteLine($"User: {configuration["user"]}");
}
config.xmlの内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<user>alice</user>
<level>expert</level>
</configuration>
INIファイルからの設定
INI形式の設定ファイルも利用可能です。
static void IniFileSetting()
{
var configuration = new ConfigurationBuilder()
.AddIniFile("config.ini", optional: true, reloadOnChange: true)
.Build();
Console.WriteLine($"User: {configuration["profile:user"]}");
}
config.iniの内容:
[profile]
user=alice
level=expert
カスタム設定プロバイダ
独自の設定ソースが必要な場合、カスタムプロバイダを実装できます。以下はデータベースから設定を読み込む例です。
// カスタム設定ソース
public class DatabaseConfigurationSource : IConfigurationSource
{
public IConfigurationProvider Build(IConfigurationBuilder builder) =>
new DatabaseConfigurationProvider();
}
// カスタム設定プロバイダ
public class DatabaseConfigurationProvider : ConfigurationProvider
{
public override void Load()
{
Data = new Dictionary<string, string?>
{
{ "db_user", "admin" },
{ "db_password", "securepassword" }
};
}
}
// 拡張メソッド
public static class DatabaseConfigurationExtensions
{
public static IConfigurationBuilder AddDatabase(this IConfigurationBuilder builder)
{
builder.Sources.Add(new DatabaseConfigurationSource());
return builder;
}
}
// 使用例
static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddDatabase()
.Build();
Console.WriteLine($"DB User: {config["db_user"]}");
}