diff --git a/GFramework.Game/setting/SettingsModel.cs b/GFramework.Game/setting/SettingsModel.cs index 997a7ed..e6df8d0 100644 --- a/GFramework.Game/setting/SettingsModel.cs +++ b/GFramework.Game/setting/SettingsModel.cs @@ -29,6 +29,7 @@ public class SettingsModel(IDataLocationProvider? locationProvider, private readonly ConcurrentDictionary _data = new(); private readonly ConcurrentDictionary> _migrationCache = new(); private readonly ConcurrentDictionary<(Type type, int from), ISettingsMigration> _migrations = new(); + private volatile bool _initialized; private IDataLocationProvider? _locationProvider = locationProvider; @@ -39,6 +40,13 @@ public class SettingsModel(IDataLocationProvider? locationProvider, private IDataLocationProvider LocationProvider => _locationProvider ?? throw new InvalidOperationException("IDataLocationProvider not initialized."); + + /// + /// 获取一个布尔值,指示当前对象是否已初始化。 + /// + /// 如果对象已初始化则返回 true,否则返回 false。 + public bool IsInitialized => _initialized; + // ========================= // Data access // ========================= @@ -46,14 +54,21 @@ public class SettingsModel(IDataLocationProvider? locationProvider, /// /// 获取指定类型的设置数据实例(唯一实例) /// + /// 实现ISettingsData接口且具有无参构造函数的类型 + /// 指定类型的设置数据实例 public T GetData() where T : class, ISettingsData, new() { + // 使用_data字典获取或添加指定类型的实例,确保唯一性 return (T)_data.GetOrAdd(typeof(T), _ => new T()); } - + /// + /// 获取所有设置数据实例的集合 + /// + /// 包含所有ISettingsData实例的可枚举集合 public IEnumerable AllData() { + // 返回_data字典中所有值的集合 return _data.Values; } @@ -73,8 +88,11 @@ public class SettingsModel(IDataLocationProvider? locationProvider, } /// - /// 获取所有设置应用器 + /// 获取所有设置应用器的集合。 /// + /// + /// 返回一个包含所有设置应用器的可枚举集合。 + /// public IEnumerable AllApplicators() { return _applicators.Values; @@ -84,6 +102,15 @@ public class SettingsModel(IDataLocationProvider? locationProvider, // Migration // ========================= + /// + /// 注册一个设置迁移对象,并将其与指定的设置类型和版本关联。 + /// + /// + /// 要注册的设置迁移对象,需实现 ISettingsMigration 接口。 + /// + /// + /// 返回当前 ISettingsModel 实例,支持链式调用。 + /// public ISettingsModel RegisterMigration(ISettingsMigration migration) { _migrations[(migration.SettingsType, migration.FromVersion)] = migration; @@ -135,6 +162,7 @@ public class SettingsModel(IDataLocationProvider? locationProvider, Log.Error($"Failed to initialize settings data: {data.GetType().Name}", ex); } + _initialized = true; this.SendEvent(new SettingsInitializedEvent()); } @@ -215,10 +243,19 @@ public class SettingsModel(IDataLocationProvider? locationProvider, // Init // ========================= + /// + /// 初始化函数,在对象创建时调用。该函数负责初始化数据仓库和位置提供者, + /// 并注册所有已知数据类型到数据仓库中。 + /// protected override void OnInit() { + // 初始化数据仓库实例,如果尚未赋值则通过依赖注入获取 _repository ??= this.GetUtility()!; + + // 初始化位置提供者实例,如果尚未赋值则通过依赖注入获取 _locationProvider ??= this.GetUtility()!; + + // 遍历所有已知的数据类型,为其分配位置并注册到数据仓库中 foreach (var type in _data.Keys) { var location = _locationProvider.GetLocation(type);