为多个订户提升域事件

我正在讨论域事件模式并阅读了很多有关该主题的资源,但我找不到实现我们要求的好方法。 基本上我们有一个服务/域层,它使用简单的CQRS实现包装存储层以进行读/写。 我们有一个ASP.NET Mvc应用程序,它使用这个服务/域层。 整个应用程序与Autofac捆绑在一起,我想要发生的是以下内容:

通过在服务层寄存器上调用“CreateNews”来创建新闻项时,需要引发一个事件:

public void CreateNews(Domain.Entities.News.NewsBO news) { ValidateBusinessObject(news); var entityNews = AutoMapper.Mapper.Map(news); NewsCommandRepository.Create(entityNews); _domainEventManager.Register(x => x.News = news); } 

这一切都发生在事务中,我不想在保存完成之前实际引发事件,所以在我们的保存更改方法中我想这样做:

 public void SaveChanges() { _repoCommandManager.SaveChanges(); _domainEventManager.RaiseEvents(); } 

然后在我们的ASP.NET Mvc应用程序中,我希望有一个IHandler的实现,如下所示:

 public class NewsCreatedDomainEventCacheHandler : IHandles { 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应用程序中调用实现。

任何建议,将不胜感激。

我想我有一个如何为你做这个的例子,我碰巧也在使用MVC和AutoFac! 在我的具体示例中,我专注于命令/查询分离,但在这样做时,我必须实现域事件模式。

首先阅读这篇博客文章,这样您就可以了解事物如何挂在一起以及代码的样子: http : //www.nootn.com.au/2013/03/command-query-separation-to-better html的

因此,我建议安装DotNetAppStarterKit.Web.Mvc NuGet包 ,然后查看Global.asax文件 ,了解如何注册所需的所有组件。 您可以仔细阅读SampleMvc应用程序,例如事件订阅者 。

我希望这会有所帮助,让你快速前进。 您可以在不使用命令和查询的情况下使用DotNetAppStarterKit的事件发布者/订阅者部分。