在哪里订阅域事件

Where to subscribe to domain events

在我的应用程序服务中,我有以下用于发布域事件的代码:

var document = await dbContext.Documents.GetAggregateAsync(message.DocumentId);

publisher.SubscribeTo<DocumentOwnerChanged>()
    .UsingDelegate(
        async a => await messageGateway.DocumentOwnerChanged(1, 1, 1));

document.ChangeOwner(message.OwnerId);

await dbContext.SaveChangesAsync();

await publisher.Publish(document.ReleaseEvents());

我正在尝试决定我是否喜欢在应用程序服务中了解发布事件的知识,或者我是否应该将其外部化到根目录中更高的地方。

想法?

您通常会在组合根中注册处理程序,除非您必须根据其他消息动态注册和注销处理程序。

对此有一些讨论

您通常会发布 域事件,通常在您的域层:

public void SomeDomainBehaviour()
{
    // do something domain-y
    DomainEvents.Publish(new DomainEvent());
}

Jimmy Bogard 讨论发布领域事件的其他方式here