using GFramework.framework.command;
using GFramework.framework.events;
using GFramework.framework.query;
namespace GFramework.framework.extensions;
///
/// 提供发送命令功能的扩展类
///
public static class CanSendCommandExtension
{
///
/// 发送指定类型的命令,该命令类型必须实现ICommand接口且具有无参构造函数
///
/// 命令类型,必须实现ICommand接口且具有无参构造函数
/// 实现ICanSendCommand接口的对象实例
public static void SendCommand(this ICanSendCommand self) where T : ICommand, new() =>
self.GetArchitecture().SendCommand(new T());
///
/// 发送指定的命令实例
///
/// 命令类型,必须实现ICommand接口
/// 实现ICanSendCommand接口的对象实例
/// 要发送的命令实例
public static void SendCommand(this ICanSendCommand self, T command) where T : ICommand =>
self.GetArchitecture().SendCommand(command);
///
/// 发送带有返回值的命令并获取执行结果
///
/// 命令执行结果的类型
/// 实现ICanSendCommand接口的对象实例
/// 要发送的命令实例,必须实现ICommand<TResult>接口
/// 命令执行后的返回结果
public static TResult SendCommand(this ICanSendCommand self, ICommand command) =>
self.GetArchitecture().SendCommand(command);
}
///
/// 提供发送事件功能的扩展类
///
public static class CanSendEventExtension
{
///
/// 发送指定类型的事件,该事件类型必须具有无参构造函数
///
/// 事件类型,必须具有无参构造函数
/// 实现ICanSendEvent接口的对象实例
public static void SendEvent(this ICanSendEvent self) where T : new() =>
self.GetArchitecture().SendEvent();
///
/// 发送指定的事件实例
///
/// 事件类型
/// 实现ICanSendEvent接口的对象实例
/// 要发送的事件实例
public static void SendEvent(this ICanSendEvent self, T e) => self.GetArchitecture().SendEvent(e);
}
///
/// 提供发送查询功能的扩展类
///
public static class CanSendQueryExtension
{
///
/// 发送查询请求并获取查询结果
///
/// 查询结果的类型
/// 实现ICanSendQuery接口的对象实例
/// 要发送的查询实例,必须实现IQuery<TResult>接口
/// 查询操作的返回结果
public static TResult SendQuery(this ICanSendQuery self, IQuery query) =>
self.GetArchitecture().SendQuery(query);
}