using System; using System.IO; using Newtonsoft.Json; namespace StandardScene.Charge { /// /// 充电策略配置服务(单例模式) /// public class ChargeStrategyConfigService { private static ChargeStrategyConfigService _instance; private static readonly object _lock = new object(); private readonly string configFilePath; private const string ConfigFileName = "ChargeStrategyConfig.json"; /// /// 获取单例实例 /// public static ChargeStrategyConfigService Instance { get { if (_instance == null) { lock (_lock) { if (_instance == null) { _instance = new ChargeStrategyConfigService(); } } } return _instance; } } private ChargeStrategyConfigService() { // 配置文件保存在应用程序目录下的 Config 文件夹 string configDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config"); // 确保目录存在 if (!Directory.Exists(configDir)) { Directory.CreateDirectory(configDir); } configFilePath = Path.Combine(configDir, ConfigFileName); } /// /// 加载配置 /// public ChargeStrategyConfig LoadConfig() { try { if (File.Exists(configFilePath)) { string json = File.ReadAllText(configFilePath); var config = JsonConvert.DeserializeObject(json); // 验证配置 if (config.Validate(out string errorMessage)) { return config; } else { // 配置无效,返回默认配置 System.Diagnostics.Debug.WriteLine($"配置验证失败: {errorMessage},使用默认配置"); return ChargeStrategyConfig.CreateDefault(); } } else { // 文件不存在,创建默认配置并保存 var defaultConfig = ChargeStrategyConfig.CreateDefault(); SaveConfig(defaultConfig); return defaultConfig; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"加载配置失败: {ex.Message}"); // 加载失败,返回默认配置 return ChargeStrategyConfig.CreateDefault(); } } /// /// 保存配置 /// public void SaveConfig(ChargeStrategyConfig config) { try { // 验证配置 if (!config.Validate(out string errorMessage)) { throw new InvalidOperationException($"配置验证失败: {errorMessage}"); } // 序列化为 JSON string json = JsonConvert.SerializeObject(config, Formatting.Indented); // 保存到文件 File.WriteAllText(configFilePath, json); System.Diagnostics.Debug.WriteLine($"配置保存成功: {configFilePath}"); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"保存配置失败: {ex.Message}"); throw new Exception($"保存配置失败: {ex.Message}", ex); } } /// /// 获取配置文件路径 /// public string GetConfigFilePath() { return configFilePath; } /// /// 检查配置文件是否存在 /// public bool ConfigFileExists() { return File.Exists(configFilePath); } /// /// 删除配置文件 /// public void DeleteConfig() { try { if (File.Exists(configFilePath)) { File.Delete(configFilePath); System.Diagnostics.Debug.WriteLine($"配置文件已删除: {configFilePath}"); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"删除配置文件失败: {ex.Message}"); throw new Exception($"删除配置文件失败: {ex.Message}", ex); } } /// /// 导出配置到指定路径 /// public void ExportConfig(string exportPath, ChargeStrategyConfig config) { try { string json = JsonConvert.SerializeObject(config, Formatting.Indented); File.WriteAllText(exportPath, json); System.Diagnostics.Debug.WriteLine($"配置导出成功: {exportPath}"); } catch (Exception ex) { throw new Exception($"导出配置失败: {ex.Message}", ex); } } /// /// 从指定路径导入配置 /// public ChargeStrategyConfig ImportConfig(string importPath) { try { if (!File.Exists(importPath)) { throw new FileNotFoundException($"配置文件不存在: {importPath}"); } string json = File.ReadAllText(importPath); var config = JsonConvert.DeserializeObject(json); // 验证配置 if (!config.Validate(out string errorMessage)) { throw new InvalidOperationException($"配置验证失败: {errorMessage}"); } return config; } catch (Exception ex) { throw new Exception($"导入配置失败: {ex.Message}", ex); } } } }