diff --git a/GFramework.Core.Tests/events/TestEvent.cs b/GFramework.Core.Tests/events/TestEvent.cs
new file mode 100644
index 0000000..d277fc7
--- /dev/null
+++ b/GFramework.Core.Tests/events/TestEvent.cs
@@ -0,0 +1,8 @@
+namespace GFramework.Core.Tests.events;
+
+public sealed class TestEvent
+{
+ public int ReceivedValue { get; init; }
+}
+
+public sealed class EmptyEvent;
\ No newline at end of file
diff --git a/GFramework.Core.Tests/model/AsyncTestModel.cs b/GFramework.Core.Tests/model/AsyncTestModel.cs
index 0994f7d..2d0e80d 100644
--- a/GFramework.Core.Tests/model/AsyncTestModel.cs
+++ b/GFramework.Core.Tests/model/AsyncTestModel.cs
@@ -1,16 +1,14 @@
using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.enums;
-using GFramework.Core.Abstractions.model;
+using GFramework.Core.model;
namespace GFramework.Core.Tests.model;
///
/// 异步测试模型类,实现了IModel和IAsyncInitializable接口
///
-public sealed class AsyncTestModel : IModel, IAsyncInitializable
+public sealed class AsyncTestModel : AbstractModel, IAsyncInitializable
{
- private IArchitectureContext _context = null!;
-
///
/// 获取模型是否已初始化的标志
///
@@ -36,24 +34,6 @@ public sealed class AsyncTestModel : IModel, IAsyncInitializable
throw new InvalidOperationException("Sync Init should not be called");
}
- ///
- /// 设置架构上下文
- ///
- /// 架构上下文对象
- public void SetContext(IArchitectureContext context)
- {
- _context = context;
- }
-
- ///
- /// 获取架构上下文
- ///
- /// 架构上下文对象
- public IArchitectureContext GetContext()
- {
- return _context;
- }
-
///
/// 处理架构阶段事件
///
@@ -61,4 +41,8 @@ public sealed class AsyncTestModel : IModel, IAsyncInitializable
public void OnArchitecturePhase(ArchitecturePhase phase)
{
}
+
+ protected override void OnInit()
+ {
+ }
}
\ No newline at end of file
diff --git a/GFramework.Core.Tests/model/ITestModel.cs b/GFramework.Core.Tests/model/ITestModel.cs
new file mode 100644
index 0000000..af86350
--- /dev/null
+++ b/GFramework.Core.Tests/model/ITestModel.cs
@@ -0,0 +1,8 @@
+using GFramework.Core.Abstractions.model;
+
+namespace GFramework.Core.Tests.model;
+
+public interface ITestModel : IModel
+{
+ int GetCurrentXp { get; }
+}
\ No newline at end of file
diff --git a/GFramework.Core.Tests/model/TestModel.cs b/GFramework.Core.Tests/model/TestModel.cs
index 5e8e83a..26da6fa 100644
--- a/GFramework.Core.Tests/model/TestModel.cs
+++ b/GFramework.Core.Tests/model/TestModel.cs
@@ -1,15 +1,14 @@
-using GFramework.Core.Abstractions.architecture;
-using GFramework.Core.Abstractions.enums;
-using GFramework.Core.Abstractions.model;
+using GFramework.Core.Abstractions.enums;
+using GFramework.Core.model;
namespace GFramework.Core.Tests.model;
///
/// 测试模型类,用于框架测试目的
///
-public sealed class TestModel : IModel
+public sealed class TestModel : AbstractModel, ITestModel
{
- private IArchitectureContext _context = null!;
+ public const int DefaultXp = 5;
///
/// 获取模型是否已初始化的状态
@@ -24,17 +23,14 @@ public sealed class TestModel : IModel
Initialized = true;
}
- public void SetContext(IArchitectureContext context)
- {
- _context = context;
- }
-
- public IArchitectureContext GetContext()
- {
- return _context;
- }
public void OnArchitecturePhase(ArchitecturePhase phase)
{
}
+
+ public int GetCurrentXp { get; } = DefaultXp;
+
+ protected override void OnInit()
+ {
+ }
}
\ No newline at end of file
diff --git a/GFramework.Core.Tests/query/TestQuery.cs b/GFramework.Core.Tests/query/TestQuery.cs
new file mode 100644
index 0000000..9dd62fc
--- /dev/null
+++ b/GFramework.Core.Tests/query/TestQuery.cs
@@ -0,0 +1,28 @@
+using GFramework.Core.Abstractions.query;
+using GFramework.Core.extensions;
+using GFramework.Core.query;
+using GFramework.Core.Tests.model;
+
+namespace GFramework.Core.Tests.query;
+
+///
+/// 测试查询类,用于执行测试查询操作
+///
+/// 测试查询输入参数
+public class TestQuery(TestQueryInput input) : AbstractQuery(input)
+{
+ ///
+ /// 执行查询操作的重写方法
+ ///
+ /// 测试查询输入参数
+ /// 返回固定的整数值42
+ protected override int OnDo(TestQueryInput input)
+ {
+ return this.GetModel()!.GetCurrentXp;
+ }
+}
+
+///
+/// 测试查询输入类,实现查询输入接口
+///
+public sealed class TestQueryInput : IQueryInput;
\ No newline at end of file
diff --git a/GFramework.Core.Tests/tests/SyncArchitectureTests.cs b/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
index 67686fe..8417126 100644
--- a/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
+++ b/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
@@ -1,6 +1,7 @@
using GFramework.Core.Abstractions.enums;
using GFramework.Core.architecture;
using GFramework.Core.Tests.architecture;
+using GFramework.Core.Tests.events;
using GFramework.Core.Tests.model;
using GFramework.Core.Tests.system;
using NUnit.Framework;
@@ -137,4 +138,68 @@ public class SyncArchitectureTests : ArchitectureTestsBase
AssertInitializationFailed();
}
+
+ ///
+ /// 测试事件是否能够被正确接收和处理
+ ///
+ ///
+ /// 该测试验证了事件系统的注册和发送功能,确保事件能够被正确传递给注册的处理器
+ ///
+ [Test]
+ public void Event_Should_Be_Received()
+ {
+ Architecture!.Initialize();
+ var context = Architecture.Context;
+
+ var receivedValue = 0;
+ const int tagetValue = 100;
+ // 注册事件处理器,将接收到的值赋给receivedValue变量
+ context.RegisterEvent(e => { receivedValue = e.ReceivedValue; });
+
+ // 发送测试事件
+ context.SendEvent(new TestEvent
+ {
+ ReceivedValue = tagetValue
+ });
+
+ Assert.That(receivedValue, Is.EqualTo(tagetValue));
+ }
+
+ ///
+ /// 测试事件取消注册功能是否正常工作
+ ///
+ ///
+ /// 该测试验证了事件处理器的取消注册功能,确保取消注册后事件处理器不再被调用
+ ///
+ [Test]
+ public void Event_UnRegister_Should_Work()
+ {
+ Architecture!.Initialize();
+ var context = Architecture.Context;
+
+ var count = 0;
+
+ // 注册事件处理器并获取取消注册对象
+ var unRegister = context.RegisterEvent(Handler);
+
+ // 发送第一个事件,此时处理器应该被调用
+ context.SendEvent(new EmptyEvent());
+
+ // 验证事件处理器被调用了一次
+ Assert.That(count, Is.EqualTo(1), "Handler should be called once before unregistration");
+
+ // 取消注册事件处理器
+ unRegister.UnRegister();
+
+ // 发送第二个事件,此时处理器不应该被调用
+ context.SendEvent(new EmptyEvent());
+
+ // 验证取消注册后,计数没有增加
+ Assert.That(count, Is.EqualTo(1), "Handler should not be called after unregistration");
+
+ void Handler(EmptyEvent _)
+ {
+ count++;
+ }
+ }
}
\ No newline at end of file
diff --git a/GFramework.Core/architecture/Architecture.cs b/GFramework.Core/architecture/Architecture.cs
index 9330462..32f7156 100644
--- a/GFramework.Core/architecture/Architecture.cs
+++ b/GFramework.Core/architecture/Architecture.cs
@@ -18,7 +18,6 @@ namespace GFramework.Core.architecture;
///
/// 架构基类,提供系统、模型、工具等组件的注册与管理功能。
/// 专注于生命周期管理、初始化流程控制和架构阶段转换。
-/// 不直接提供业务操作方法,业务操作通过 ArchitectureRuntime 提供。
///
public abstract class Architecture(
IArchitectureConfiguration? configuration = null,