.NET Coreにおける構成の実践的な使用方法

ここでは、.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"]}");
}

タグ: .NET Core configuration IConfigurationProvider

7月10日 16:50 投稿