using GFramework.Core.Abstractions.Events; using GFramework.Core.Abstractions.Rule; namespace GFramework.Core.Extensions; /// /// 提供对 IContextAware 接口的事件管理扩展方法 /// public static class ContextAwareEventExtensions { /// /// 发送一个事件 /// /// 事件类型 /// 实现 IContextAware 接口的对象 /// 当 contextAware 为 null 时抛出 public static void SendEvent(this IContextAware contextAware) where TEvent : new() { ArgumentNullException.ThrowIfNull(contextAware); var context = contextAware.GetContext(); context.SendEvent(); } /// /// 发送一个具体的事件实例 /// /// 事件类型 /// 实现 IContextAware 接口的对象 /// 事件实例 /// 当 contextAware 或 e 为 null 时抛出 public static void SendEvent(this IContextAware contextAware, TEvent e) where TEvent : class { ArgumentNullException.ThrowIfNull(contextAware); ArgumentNullException.ThrowIfNull(e); var context = contextAware.GetContext(); context.SendEvent(e); } /// /// 注册事件处理器 /// /// 事件类型 /// 实现 IContextAware 接口的对象 /// 事件处理委托 /// 事件注销接口 public static IUnRegister RegisterEvent(this IContextAware contextAware, Action handler) { ArgumentNullException.ThrowIfNull(contextAware); ArgumentNullException.ThrowIfNull(handler); var context = contextAware.GetContext(); return context.RegisterEvent(handler); } /// /// 取消对某类型事件的监听 /// /// 事件类型 /// 实现 IContextAware 接口的对象 /// 之前绑定的事件处理器 public static void UnRegisterEvent(this IContextAware contextAware, Action onEvent) { ArgumentNullException.ThrowIfNull(contextAware); ArgumentNullException.ThrowIfNull(onEvent); var context = contextAware.GetContext(); context.UnRegisterEvent(onEvent); } }