dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

C#設定をファイルから読み出しどこからでもアクセスできるようにする

いわゆるdependency injectionで、設定値を読み出すコードと参照するコードを分離する。 DIの概念などは他に解説があるから、ここでは具体的な方法だけに絞って記述する。

重要なのは、usingされている次の3つ

  • Microsoft.Extensions.DependencyInjection
  • CommunityToolkit.Mvvm.DependencyInjection
  • Microsoft.Extensions.Configuration

このコードの目的は、どこからでも参照できるようセットすること

using CommunityToolkit.Mvvm.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

// 中略

var services = new ServiceCollection();
// Configというinterfaceをキーとして要求すると、ProductionConfigというインスタンスを返すよう設定。
services.AddSingleton<Config, ProductionConfig>();
var provider = services.BuildServiceProvider();
Ioc.Default.ConfigureServices(provider);

このコードの目的は、設定値をファイルから読み出すこと

using Microsoft.Extensions.Configuration;

// 中略

var basePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var appPath = Path.Combine(basePath, AppDirName);
var configuration = new ConfigurationBuilder()
      .SetBasePath(appPath)
      .AddJsonFile("appsettings.json")
      .Build();
var bootstrapSetting = configuration.Get<BootstrapSetting>();
// BootstrapSettingはここでは設定値をメンバにバインドするためのclass

このコードの目的は、セットされた参照を読み出し利用すること

using CommunityToolkit.Mvvm.DependencyInjection;

// 中略

Ioc.Default.GetService<Config>().bootstrapSetting