Повышение событий домена для нескольких подписчиков
Я заявляю, что изучаю шаблон «События домена» и прочитал много ресурсов по этой теме, но не могу найти хороший способ реализации наших требований. По сути, у нас есть уровень Service / Domain, который оборачивает уровень хранилища для чтения / записи с упрощенной реализацией CQRS. У нас есть приложение ASP.NET Mvc, которое использует этот уровень службы / домена. Все приложение связано с Autofac, и я бы хотел, чтобы это произошло следующим образом:
Когда новостной элемент создается путем вызова, скажем, «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.
Мы ценим любые предложения.