using GFramework.Core.command; using GFramework.Core.events; using GFramework.Core.query; namespace GFramework.Core.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) { return 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) { return self.GetArchitecture().SendQuery(query); } }