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