いわゆる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