204 lines
6.4 KiB
C#
204 lines
6.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace StandardScene.Charge
|
|
{
|
|
/// <summary>
|
|
/// 充电策略配置服务(单例模式)
|
|
/// </summary>
|
|
public class ChargeStrategyConfigService
|
|
{
|
|
private static ChargeStrategyConfigService _instance;
|
|
private static readonly object _lock = new object();
|
|
private readonly string configFilePath;
|
|
private const string ConfigFileName = "ChargeStrategyConfig.json";
|
|
|
|
/// <summary>
|
|
/// 获取单例实例
|
|
/// </summary>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载配置
|
|
/// </summary>
|
|
public ChargeStrategyConfig LoadConfig()
|
|
{
|
|
try
|
|
{
|
|
if (File.Exists(configFilePath))
|
|
{
|
|
string json = File.ReadAllText(configFilePath);
|
|
var config = JsonConvert.DeserializeObject<ChargeStrategyConfig>(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();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存配置
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取配置文件路径
|
|
/// </summary>
|
|
public string GetConfigFilePath()
|
|
{
|
|
return configFilePath;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查配置文件是否存在
|
|
/// </summary>
|
|
public bool ConfigFileExists()
|
|
{
|
|
return File.Exists(configFilePath);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除配置文件
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导出配置到指定路径
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 从指定路径导入配置
|
|
/// </summary>
|
|
public ChargeStrategyConfig ImportConfig(string importPath)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(importPath))
|
|
{
|
|
throw new FileNotFoundException($"配置文件不存在: {importPath}");
|
|
}
|
|
|
|
string json = File.ReadAllText(importPath);
|
|
var config = JsonConvert.DeserializeObject<ChargeStrategyConfig>(json);
|
|
|
|
// 验证配置
|
|
if (!config.Validate(out string errorMessage))
|
|
{
|
|
throw new InvalidOperationException($"配置验证失败: {errorMessage}");
|
|
}
|
|
|
|
return config;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception($"导入配置失败: {ex.Message}", ex);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|