refactor(architecture): 移除架构生命周期事件发送功能

- 从 Architecture.cs 中移除所有 EventBus.Send 事件发送调用
- 删除 ArchitectureEvents.cs 文件及其相关事件定义
- 移除架构销毁开始、销毁完成和初始化失败事件的发送逻辑
- 更新测试代码移除对已删除事件的依赖
This commit is contained in:
GeWuYou 2026-01-24 09:15:31 +08:00
parent 7314bf03d0
commit 2d15184afe
6 changed files with 12 additions and 219 deletions

View File

@ -42,7 +42,6 @@ public abstract class TestArchitectureBase : Architecture
{
InitCalled = true;
_postRegistrationHook?.Invoke(this);
Context.RegisterEvent<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => { ReadyEventFired = true; });
}
/// <summary>

View File

@ -1,173 +0,0 @@
using GFramework.Core.events;
using NUnit.Framework;
namespace GFramework.Core.Tests.events;
/// <summary>
/// ArchitectureEvents类的单元测试
/// 测试内容包括:
/// - ArchitectureLifecycleReadyEvent事件触发
/// - ArchitectureDestroyingEvent事件触发
/// - ArchitectureDestroyedEvent事件触发
/// - ArchitectureFailedInitializationEvent事件触发
/// - 事件的参数传递
/// - 事件的订阅和取消订阅
/// - 事件顺序验证LifecycleReady -> Destroying -> Destroyed
/// </summary>
[TestFixture]
public class ArchitectureEventsTests
{
[SetUp]
public void SetUp()
{
_eventBus = new EventBus();
}
private EventBus? _eventBus;
/// <summary>
/// 测试ArchitectureLifecycleReadyEvent事件可以创建并发送
/// </summary>
[Test]
public void ArchitectureLifecycleReadyEvent_Should_Be_Created_And_Sent()
{
bool eventReceived = false;
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => eventReceived = true);
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
Assert.That(eventReceived, Is.True);
}
/// <summary>
/// 测试ArchitectureDestroyingEvent事件可以创建并发送
/// </summary>
[Test]
public void ArchitectureDestroyingEvent_Should_Be_Created_And_Sent()
{
bool eventReceived = false;
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyingEvent>(_ => eventReceived = true);
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyingEvent>();
Assert.That(eventReceived, Is.True);
}
/// <summary>
/// 测试ArchitectureDestroyedEvent事件可以创建并发送
/// </summary>
[Test]
public void ArchitectureDestroyedEvent_Should_Be_Created_And_Sent()
{
bool eventReceived = false;
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyedEvent>(_ => eventReceived = true);
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyedEvent>();
Assert.That(eventReceived, Is.True);
}
/// <summary>
/// 测试ArchitectureFailedInitializationEvent事件可以创建并发送
/// </summary>
[Test]
public void ArchitectureFailedInitializationEvent_Should_Be_Created_And_Sent()
{
bool eventReceived = false;
_eventBus!.Register<ArchitectureEvents.ArchitectureFailedInitializationEvent>(_ => eventReceived = true);
_eventBus.Send<ArchitectureEvents.ArchitectureFailedInitializationEvent>();
Assert.That(eventReceived, Is.True);
}
/// <summary>
/// 测试事件按正确顺序发送
/// </summary>
[Test]
public void Events_Should_Be_Sent_In_Correct_Order()
{
var events = new List<string>();
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => events.Add("Ready"));
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyingEvent>(_ => events.Add("Destroying"));
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyedEvent>(_ => events.Add("Destroyed"));
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyingEvent>();
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyedEvent>();
Assert.That(events.Count, Is.EqualTo(3));
Assert.That(events[0], Is.EqualTo("Ready"));
Assert.That(events[1], Is.EqualTo("Destroying"));
Assert.That(events[2], Is.EqualTo("Destroyed"));
}
/// <summary>
/// 测试多个订阅者都能接收到事件
/// </summary>
[Test]
public void Multiple_Subscribers_Should_All_Receive_Events()
{
var count1 = 0;
var count2 = 0;
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => count1++);
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => count2++);
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
Assert.That(count1, Is.EqualTo(1));
Assert.That(count2, Is.EqualTo(1));
}
/// <summary>
/// 测试事件取消订阅后不再接收未来事件
/// </summary>
[Test]
public void Event_UnRegister_Should_Prevent_Future_Events()
{
var count = 0;
var unregister = _eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => count++);
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
Assert.That(count, Is.EqualTo(1));
unregister.UnRegister();
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
Assert.That(count, Is.EqualTo(1));
}
/// <summary>
/// 测试不同类型事件互不干扰
/// </summary>
[Test]
public void Different_Events_Should_Not_Interfere()
{
bool readyReceived = false;
bool destroyingReceived = false;
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => readyReceived = true);
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyingEvent>(_ => destroyingReceived = true);
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
Assert.That(readyReceived, Is.True);
Assert.That(destroyingReceived, Is.False);
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyingEvent>();
Assert.That(destroyingReceived, Is.True);
}
/// <summary>
/// 测试事件可以在没有订阅者时发送
/// </summary>
[Test]
public void Event_Can_Be_Sent_Without_Subscribers()
{
Assert.That(() => _eventBus!.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(),
Throws.Nothing);
}
}

View File

@ -1,3 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.enums;
using GFramework.Core.Abstractions.environment;
@ -71,11 +75,6 @@ public abstract class Architecture(
/// </summary>
private IIocContainer Container => Services.Container;
/// <summary>
/// 获取事件总线
/// </summary>
private IEventBus EventBus => Services.EventBus;
/// <summary>
/// 当前架构的阶段
/// </summary>
@ -363,10 +362,9 @@ public abstract class Architecture(
return;
}
// 进入销毁阶段并发送销毁开始事件
// 进入销毁阶段
_logger.Info("Starting architecture destruction");
EnterPhase(ArchitecturePhase.Destroying);
EventBus.Send(new ArchitectureEvents.ArchitectureDestroyingEvent());
// 销毁所有实现了 IDisposable 的组件(按注册逆序销毁)
_logger.Info($"Destroying {_disposables.Count} disposable components");
@ -389,9 +387,8 @@ public abstract class Architecture(
_disposables.Clear();
_disposableSet.Clear();
// 进入已销毁阶段并发送销毁完成事件
// 进入已销毁阶段
EnterPhase(ArchitecturePhase.Destroyed);
EventBus.Send(new ArchitectureEvents.ArchitectureDestroyedEvent());
_logger.Info("Architecture destruction completed");
}
@ -499,7 +496,6 @@ public abstract class Architecture(
{
_logger.Error("Architecture initialization failed:", e);
EnterPhase(ArchitecturePhase.FailedInitialization);
EventBus.Send(new ArchitectureEvents.ArchitectureFailedInitializationEvent());
throw;
}
}
@ -518,7 +514,6 @@ public abstract class Architecture(
{
_logger.Error("Architecture initialization failed:", e);
EnterPhase(ArchitecturePhase.FailedInitialization);
EventBus.Send(new ArchitectureEvents.ArchitectureFailedInitializationEvent());
throw;
}
}
@ -560,7 +555,6 @@ public abstract class Architecture(
_mInitialized = true;
EnterPhase(ArchitecturePhase.Ready);
EventBus.Send(new ArchitectureEvents.ArchitectureLifecycleReadyEvent());
_logger.Info($"Architecture {GetType().Name} is ready - all components initialized");
}

View File

@ -1,4 +1,7 @@
using GFramework.Core.Abstractions.coroutine;
using System;
using System.Collections.Generic;
using System.Threading;
using GFramework.Core.Abstractions.coroutine;
namespace GFramework.Core.coroutine;

View File

@ -1,31 +0,0 @@
namespace GFramework.Core.events;
/// <summary>
/// 架构事件定义类,包含应用程序架构生命周期相关的事件结构体
/// </summary>
public static class ArchitectureEvents
{
/// <summary>
/// 架构生命周期准备就绪事件
/// 当架构完成初始化并准备就绪时触发此事件
/// </summary>
public readonly struct ArchitectureLifecycleReadyEvent;
/// <summary>
/// 架构销毁中事件
/// 当架构开始销毁过程时触发此事件,表示系统正在关闭
/// </summary>
public readonly struct ArchitectureDestroyingEvent;
/// <summary>
/// 架构已销毁事件
/// 当架构完全销毁完成后触发此事件,表示系统已关闭
/// </summary>
public readonly struct ArchitectureDestroyedEvent;
/// <summary>
/// 架构初始化失败事件
/// 当架构初始化过程中发生错误时触发此事件
/// </summary>
public readonly struct ArchitectureFailedInitializationEvent;
}

View File

@ -1,4 +1,5 @@
using GFramework.Core.Abstractions.events;
using System;
using GFramework.Core.Abstractions.events;
namespace GFramework.Core.events;