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