我说要研究领域事件模式并阅读了很多关于该主题的资源,但我找不到满足我们要求的好方法。基本上,我们有一个服务/域层,它使用简单的 CQRS 实现包装用于读取/写入的存储库层。我们有一个使用此服务/域层的 ASP.NET Mvc 应用程序。整个应用程序与 Autofac 绑定在一起,我希望发生以下情况:
当通过在服务层上调用say“CreateNews”来创建新闻项目时,将需要引发一个事件,如下所示:
public void CreateNews(Domain.Entities.News.NewsBO news)
{
ValidateBusinessObject(news);
var entityNews = AutoMapper.Mapper.Map<Repositories.Entities.News.News>(news);
NewsCommandRepository.Create(entityNews);
_domainEventManager.Register<NewsCreatedDomainEvent>(x => x.News = news);
}
这一切都发生在事务中,我不想在保存完成之前真正引发事件,所以在我们的保存更改方法中我想这样做:
public void SaveChanges()
{
_repoCommandManager.SaveChanges();
_domainEventManager.RaiseEvents();
}
然后在我们的 ASP.NET Mvc 应用程序中,我想要一个 IHandler 的实现,如下所示:
public class NewsCreatedDomainEventCacheHandler : IHandles<Project.Services.Domain.Events.News.NewsCreatedDomainEvent>
{
public void Handle(Services.Domain.Events.News.NewsCreatedDomainEvent @event)
{
// In here we would update the cache or something else particular to the web layer
}
}
我无法弄清楚如何从 save 方法引发此事件并在 Web.Mvc 应用程序中调用实现。
任何建议,将不胜感激。