mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
feat(setting): 添加设置持久化功能
- 实现了 SettingsPersistence 类提供设置数据的加载、保存、删除等操作 - 定义了 ISettingsPersistence 接口规范设置持久化行为 - 集成存储服务支持异步读写设置节数据 - 实现类型安全的设置节存取机制 - 提供设置节存在性检查和删除功能 - 采用 "Settings_类型名称" 格式生成存储键名
This commit is contained in:
parent
66d4c8be11
commit
516a9e2281
39
GFramework.Game.Abstractions/setting/ISettingsPersistence.cs
Normal file
39
GFramework.Game.Abstractions/setting/ISettingsPersistence.cs
Normal file
@ -0,0 +1,39 @@
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GFramework.Game.Abstractions.setting;
|
||||
|
||||
/// <summary>
|
||||
/// 设置持久化接口
|
||||
/// 定义了设置数据的异步加载、保存、检查存在性和删除操作
|
||||
/// </summary>
|
||||
public interface ISettingsPersistence
|
||||
{
|
||||
/// <summary>
|
||||
/// 异步加载指定类型的设置节
|
||||
/// </summary>
|
||||
/// <typeparam name="T">设置节类型,必须实现ISettingsSection接口并具有无参构造函数</typeparam>
|
||||
/// <returns>返回加载的设置节实例</returns>
|
||||
Task<T> LoadAsync<T>() where T : class, ISettingsSection, new();
|
||||
|
||||
/// <summary>
|
||||
/// 异步保存指定的设置节
|
||||
/// </summary>
|
||||
/// <typeparam name="T">设置节类型,必须实现ISettingsSection接口</typeparam>
|
||||
/// <param name="section">要保存的设置节实例</param>
|
||||
/// <returns>异步操作任务</returns>
|
||||
Task SaveAsync<T>(T section) where T : class, ISettingsSection;
|
||||
|
||||
/// <summary>
|
||||
/// 异步检查指定类型的设置节是否存在
|
||||
/// </summary>
|
||||
/// <typeparam name="T">设置节类型,必须实现ISettingsSection接口</typeparam>
|
||||
/// <returns>如果设置节存在则返回true,否则返回false</returns>
|
||||
Task<bool> ExistsAsync<T>() where T : class, ISettingsSection;
|
||||
|
||||
/// <summary>
|
||||
/// 异步删除指定类型的设置节
|
||||
/// </summary>
|
||||
/// <typeparam name="T">设置节类型,必须实现ISettingsSection接口</typeparam>
|
||||
/// <returns>异步操作任务</returns>
|
||||
Task DeleteAsync<T>() where T : class, ISettingsSection;
|
||||
}
|
||||
80
GFramework.Game/setting/SettingsPersistence.cs
Normal file
80
GFramework.Game/setting/SettingsPersistence.cs
Normal file
@ -0,0 +1,80 @@
|
||||
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}";
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user