GFramework/GFramework.Game/setting/SettingsPersistence.cs
GeWuYou 516a9e2281 feat(setting): 添加设置持久化功能
- 实现了 SettingsPersistence 类提供设置数据的加载、保存、删除等操作
- 定义了 ISettingsPersistence 接口规范设置持久化行为
- 集成存储服务支持异步读写设置节数据
- 实现类型安全的设置节存取机制
- 提供设置节存在性检查和删除功能
- 采用 "Settings_类型名称" 格式生成存储键名
2026-01-16 23:25:33 +08:00

80 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using GFramework.Core.Abstractions.storage;
using GFramework.Core.extensions;
using GFramework.Core.utility;
using GFramework.Game.Abstractions.setting;
namespace GFramework.Game.setting;
/// <summary>
/// 设置持久化服务类,负责处理设置数据的加载、保存、删除等操作
/// </summary>
public class SettingsPersistence : AbstractContextUtility, ISettingsPersistence
{
private IStorage _storage = null!;
/// <summary>
/// 异步加载指定类型的设置节数据
/// </summary>
/// <typeparam name="T">设置节类型必须实现ISettingsSection接口</typeparam>
/// <returns>如果存在则返回已保存的设置数据,否则返回新创建的默认设置实例</returns>
public async Task<T> LoadAsync<T>() where T : class, ISettingsSection, new()
{
var key = GetKey<T>();
if (await _storage.ExistsAsync(key))
{
return await _storage.ReadAsync<T>(key);
}
return new T();
}
/// <summary>
/// 异步保存设置节数据到存储中
/// </summary>
/// <typeparam name="T">设置节类型必须实现ISettingsSection接口</typeparam>
/// <param name="section">要保存的设置节实例</param>
public async Task SaveAsync<T>(T section) where T : class, ISettingsSection
{
var key = GetKey<T>();
await _storage.WriteAsync(key, section);
}
/// <summary>
/// 异步检查指定类型的设置节是否存在
/// </summary>
/// <typeparam name="T">设置节类型必须实现ISettingsSection接口</typeparam>
/// <returns>如果设置节存在返回true否则返回false</returns>
public async Task<bool> ExistsAsync<T>() where T : class, ISettingsSection
{
var key = GetKey<T>();
return await _storage.ExistsAsync(key);
}
/// <summary>
/// 异步删除指定类型的设置节数据
/// </summary>
/// <typeparam name="T">设置节类型必须实现ISettingsSection接口</typeparam>
public async Task DeleteAsync<T>() where T : class, ISettingsSection
{
var key = GetKey<T>();
_storage.Delete(key);
await Task.CompletedTask;
}
/// <summary>
/// 初始化方法,获取存储服务实例
/// </summary>
protected override void OnInit()
{
_storage = this.GetUtility<IStorage>()!;
}
/// <summary>
/// 获取设置节对应的存储键名
/// </summary>
/// <typeparam name="T">设置节类型</typeparam>
/// <returns>格式为"Settings_类型名称"的键名字符串</returns>
private static string GetKey<T>() where T : ISettingsSection
=> $"Settings_{typeof(T).Name}";
}