这个问题通常出现在使用CQRS和事件驱动架构中。它表示聚合成员没有订阅对应的命令处理程序。
例如,假设我们有一个名为“Order”的聚合,其中包含多个订单项。我们希望能够像这样发送一个称为“AddOrderItem”的命令:
public class AddOrderItemCommand : ICommand
{
public Guid OrderId { get; set; }
public OrderItem OrderItem { get; set; }
}
public class OrderItem
{
public Guid ProductId { get; set; }
public int Quantity { get; set; }
}
当我们处理这个命令时,我们需要确保调用正确的聚合成员处理程序。在这个例子中,我们需要找到名为“Order”的聚合,并将命令发送给它包含的单个订单项。
为了实现这个功能,我们需要在聚合成员中订阅这个命令。具体来说,我们需要在聚合成员中使用以下代码来订阅命令:
public class Order : IAggregateRoot
{
public Guid Id { get; set; }
private List _orderItems = new List();
public void AddOrderItem(OrderItem orderItem)
{
Apply(new OrderItemAddedEvent(orderItem));
}
// ...
private void Apply(OrderItemAddedEvent @event)
{
_orderItems.Add(@event.OrderItem);
}
// ...
public static Order CreateOrder(Guid id)
{
var order = new Order();
order.Apply(new OrderCreatedEvent(id));
return order;
}
// ...
private void Apply(OrderCreatedEvent @event)
{
Id = @event.OrderId;
}
}
public class OrderItem : IAggregateMember
{
public Guid Id { get; set; }
public Guid ProductId { get; set; }
public int Quantity { get; set; }
public void Execute(Action