// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using GFramework.Cqrs.Abstractions.Cqrs; namespace GFramework.Cqrs.Notification; /// /// 表示一次通知发布调用的执行上下文。 /// /// 通知类型。 /// /// 该上下文把“当前通知”“已解析处理器集合”和“执行单个处理器”的入口收敛到同一对象中, /// 使发布策略只需决定遍历、排序或并发方式,而无需了解 dispatcher 的上下文注入细节。 /// public abstract class NotificationPublishContext where TNotification : INotification { /// /// 初始化一次通知发布上下文。 /// /// 当前通知。 /// 当前发布调用已解析到的处理器集合。 /// /// 。 /// protected NotificationPublishContext(TNotification notification, IReadOnlyList handlers) { ArgumentNullException.ThrowIfNull(notification); ArgumentNullException.ThrowIfNull(handlers); Notification = notification; Handlers = handlers; } /// /// 获取当前要发布的通知。 /// public TNotification Notification { get; } /// /// 获取当前发布调用已解析到的处理器集合。 /// public IReadOnlyList Handlers { get; } /// /// 执行单个通知处理器。 /// /// 要执行的处理器实例。 /// 取消令牌。 /// 表示当前处理器执行完成的值任务。 public abstract ValueTask InvokeHandlerAsync(object handler, CancellationToken cancellationToken); }