Generando eventos de dominio para múltiples suscriptores
Me estoy refiriendo a mirar el patrón de Eventos de Dominio y he leído muchos recursos sobre el tema, pero no puedo encontrar una buena manera de implementar para nuestros requisitos. Básicamente tenemos una capa de Servicio / Dominio que envuelve la capa de repositorio para lecturas / escrituras con una implementación CQRS simplista. Tenemos una aplicación ASP.NET Mvc que consume esta capa de servicio / dominio. Toda la aplicación está vinculada con Autofac y lo que me gustaría que sucediera es para lo siguiente:
Cuando se crea una noticia al llamar, diga "Crear Noticias" en el registro de la capa de servicio, será necesario que se genere un evento para:
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);
}
Todo esto está sucediendo en una transacción y no quiero elevar el evento hasta que se complete el proceso de guardado, por lo que, en nuestro método para guardar cambios, quiero hacer esto:
public void SaveChanges()
{
_repoCommandManager.SaveChanges();
_domainEventManager.RaiseEvents();
}
Luego, en nuestra aplicación ASP.NET Mvc, quiero tener una implementación de un IHandler que tenga este aspecto:
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
}
}
No puedo averiguar cómo hacer para elevar este evento desde el método de guardar y llamar a la implementación en la aplicación Web.Mvc.
Cualquier sugerencia sera apreciada.