Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class EventsController
- : Controller
- {
- private readonly IEnumerable<IEventHandler> _projectors;
- public EventsController(IEnumerable<IEventHandler> projectors)
- {
- _projectors = projectors;
- }
- [HttpPost("EventA")]
- public IActionResult AddEventA([FromBody]EventA evt)
- {
- foreach (var projector in _projectors)
- {
- projector.Handle(evt);
- }
- return Ok();
- }
- [HttpPost("EventB")]
- public IActionResult AddEventB([FromBody]EventB evt)
- {
- foreach (var projector in _projectors)
- {
- projector.Handle(evt);
- }
- return Ok();
- }
- }
- public class ProjectorA : IEventHandler<EventA>, IEventHandler<EventB>
- {
- private readonly IRepository _repository;
- public ProjectorA(IRepository repository)
- {
- _repository = repository;
- }
- public void Handle(EventA evt)
- {
- // do something with EventA
- }
- public void Handle(EventB evt)
- {
- // do something with EventB
- }
- }
- public class ProjectorB : IEventHandler<EventA>
- {
- private readonly IRepository _repository;
- public ProjectorA(IRepository repository)
- {
- _repository = repository;
- }
- public void Handle(EventA evt)
- {
- // do something with EventA
- }
- // I don't care about EventB so I don't subscribe to it
- }
- public interface IEventHandler<in TDomainEvent>
- : IEventHandler
- where TDomainEvent : IDomainEvent
- {
- void Handle(TDomainEvent evt);
- }
Add Comment
Please, Sign In to add comment