using System.IO; using System.Text.Json; using AxiOmron.PcbCheck.Options; using AxiOmron.PcbCheck.Services.Interfaces; namespace AxiOmron.PcbCheck.Services.Implementations; /// /// 提供应用配置文件的读取与保存能力。 /// public sealed class AppConfigService : IAppConfigService { private static readonly JsonSerializerOptions JsonOptions = new() { PropertyNameCaseInsensitive = true, WriteIndented = true }; /// /// 读取当前应用配置。 /// /// 根配置对象。 public AppConfig Load() { var configPath = GetConfigPath(); if (!File.Exists(configPath)) { var defaultConfig = new AppConfig(); Save(defaultConfig); return defaultConfig; } var json = File.ReadAllText(configPath); var config = JsonSerializer.Deserialize(json, JsonOptions); return config ?? new AppConfig(); } /// /// 保存当前应用配置。 /// /// 待保存的配置对象。 public void Save(AppConfig config) { ArgumentNullException.ThrowIfNull(config); var configPath = GetConfigPath(); var directory = Path.GetDirectoryName(configPath); if (!string.IsNullOrWhiteSpace(directory)) { Directory.CreateDirectory(directory); } var json = JsonSerializer.Serialize(config, JsonOptions); File.WriteAllText(configPath, json); } /// /// 获取主配置文件路径。 /// /// 配置文件绝对路径。 public string GetConfigPath() { return Path.Combine(AppContext.BaseDirectory, "appConfig.json"); } }