From a4b3bca1c13f026a393b4836b85d54be9c71629b Mon Sep 17 00:00:00 2001
From: GeWuYou <95328647+GeWuYou@users.noreply.github.com>
Date: Fri, 20 Feb 2026 22:46:48 +0800
Subject: [PATCH] =?UTF-8?q?feat(registries):=20=E6=89=A9=E5=B1=95=E6=B3=A8?=
=?UTF-8?q?=E5=86=8C=E8=A1=A8=E6=8E=A5=E5=8F=A3=E5=8A=9F=E8=83=BD=E5=B9=B6?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=9F=BA=E7=A1=80=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 移除 IRegistry 接口中的 in 泛型约束
- 添加 Unregister 方法用于移除指定键的项
- 添加 GetAll 方法用于获取所有键值对
- 添加 Values 方法用于获取所有注册值
- 添加 Keys 属性用于获取所有键
- 添加 Count 属性用于获取项的数量
- 在 KeyValueRegistryBase 中实现新增的接口方法
- 添加 System.Collections.ObjectModel 引用支持只读集合
---
.../registries/IRegistry.cs | 32 +++++++++++++-
.../registries/KeyValueRegistryBase.cs | 42 ++++++++++++++++++-
2 files changed, 72 insertions(+), 2 deletions(-)
diff --git a/GFramework.Core.Abstractions/registries/IRegistry.cs b/GFramework.Core.Abstractions/registries/IRegistry.cs
index d5120fd..74002b8 100644
--- a/GFramework.Core.Abstractions/registries/IRegistry.cs
+++ b/GFramework.Core.Abstractions/registries/IRegistry.cs
@@ -7,8 +7,18 @@ namespace GFramework.Core.Abstractions.registries;
///
/// 注册表中用作键的类型
/// 注册表中存储的值的类型
-public interface IRegistry
+public interface IRegistry
{
+ ///
+ /// 获取注册表中所有的键
+ ///
+ IEnumerable Keys { get; }
+
+ ///
+ /// 获取注册表中项的数量
+ ///
+ int Count { get; }
+
///
/// 根据指定的键获取对应的值
///
@@ -35,4 +45,24 @@ public interface IRegistry
/// 要添加的键
/// 要添加的值
IRegistry Registry(T key, Tr value);
+
+ ///
+ /// 从注册表中移除指定键的项
+ ///
+ /// 要移除的键
+ /// 如果成功移除则返回true,否则返回false
+ bool Unregister(T key);
+
+ ///
+ /// 获取注册表中所有的键值对
+ ///
+ /// 包含所有注册键值对的只读字典
+ IReadOnlyDictionary GetAll();
+
+
+ ///
+ /// 获取注册表中所有的值
+ ///
+ /// 包含所有注册值的只读集合
+ IReadOnlyCollection Values();
}
\ No newline at end of file
diff --git a/GFramework.Core.Abstractions/registries/KeyValueRegistryBase.cs b/GFramework.Core.Abstractions/registries/KeyValueRegistryBase.cs
index 7cbe166..cc97229 100644
--- a/GFramework.Core.Abstractions/registries/KeyValueRegistryBase.cs
+++ b/GFramework.Core.Abstractions/registries/KeyValueRegistryBase.cs
@@ -1,4 +1,5 @@
-using GFramework.Core.Abstractions.bases;
+using System.Collections.ObjectModel;
+using GFramework.Core.Abstractions.bases;
namespace GFramework.Core.Abstractions.registries;
@@ -61,6 +62,7 @@ public abstract class KeyValueRegistryBase
return this;
}
+
///
/// 注册键值对映射对象到注册表中
///
@@ -70,4 +72,42 @@ public abstract class KeyValueRegistryBase
{
return Registry(mapping.Key, mapping.Value);
}
+
+ ///
+ /// 从注册表中移除指定键的项
+ ///
+ /// 要移除的键
+ /// 如果成功移除则返回true,否则返回false
+ public bool Unregister(TKey key)
+ {
+ return Map.Remove(key);
+ }
+
+ ///
+ /// 获取注册表中所有的键值对
+ ///
+ /// 包含所有注册键值对的只读字典
+ public IReadOnlyDictionary GetAll()
+ {
+ return Map as IReadOnlyDictionary ?? new ReadOnlyDictionary(Map);
+ }
+
+ ///
+ /// 获取注册表中所有的值
+ ///
+ /// 包含所有注册值的只读集合
+ public IReadOnlyCollection Values()
+ {
+ return Map.Values as IReadOnlyCollection ?? new ReadOnlyCollection([]);
+ }
+
+ ///
+ /// 获取注册表中所有的键
+ ///
+ public IEnumerable Keys => Map.Keys;
+
+ ///
+ /// 获取注册表中项的数量
+ ///
+ public int Count => Map.Count;
}
\ No newline at end of file