using GFramework.Core.Abstractions.architecture; using GFramework.Core.Abstractions.command; using GFramework.Core.Abstractions.events; using GFramework.Core.Abstractions.query; namespace GFramework.Core.architecture; /// /// 架构运行时默认实现,委托 ArchitectureContext 执行具体操作 /// public class ArchitectureRuntime(IArchitectureContext context) : IArchitectureRuntime { private readonly IArchitectureContext _context = context ?? throw new ArgumentNullException(nameof(context)); #region Query Execution /// /// 发起一次查询请求并获得其结果 /// /// 查询结果的数据类型 /// 要发起的查询对象 /// 查询得到的结果数据 public TResult SendQuery(IQuery query) { return _context.SendQuery(query); } #endregion #region Command Execution /// /// 发送一个无返回结果的命令请求 /// /// 命令的具体类型 /// 要发送的命令对象 public void SendCommand(TCommand command) where TCommand : ICommand { _context.SendCommand(command); } /// /// 发送一个带返回结果的命令请求 /// /// 命令执行后的返回值类型 /// 要发送的命令对象 /// 命令执行的结果 public TResult SendCommand(ICommand command) { return _context.SendCommand(command); } #endregion #region Event Management /// /// 发布一个默认构造的新事件对象 /// /// 事件类型 public void SendEvent() where TEvent : new() { _context.SendEvent(); } /// /// 发布一个具体的事件对象 /// /// 事件类型 /// 要发布的事件实例 public void SendEvent(TEvent e) where TEvent : class { _context.SendEvent(e); } /// /// 订阅某个特定类型的事件 /// /// 事件类型 /// 当事件发生时触发的动作 /// 可用于取消订阅的对象 public IUnRegister RegisterEvent(Action onEvent) { return _context.RegisterEvent(onEvent); } /// /// 取消对某类型事件的监听 /// /// 事件类型 /// 之前绑定的事件处理器 public void UnRegisterEvent(Action onEvent) { _context.UnRegisterEvent(onEvent); } #endregion }