Guest User

Untitled

a guest
Apr 27th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. public class EventsController
  2. : Controller
  3. {
  4. private readonly IEnumerable<IEventHandler> _projectors;
  5.  
  6. public EventsController(IEnumerable<IEventHandler> projectors)
  7. {
  8. _projectors = projectors;
  9. }
  10.  
  11. [HttpPost("EventA")]
  12. public IActionResult AddEventA([FromBody]EventA evt)
  13. {
  14. foreach (var projector in _projectors)
  15. {
  16. projector.Handle(evt);
  17. }
  18. return Ok();
  19. }
  20.  
  21. [HttpPost("EventB")]
  22. public IActionResult AddEventB([FromBody]EventB evt)
  23. {
  24. foreach (var projector in _projectors)
  25. {
  26. projector.Handle(evt);
  27. }
  28. return Ok();
  29. }
  30. }
  31.  
  32. public class ProjectorA : IEventHandler<EventA>, IEventHandler<EventB>
  33. {
  34. private readonly IRepository _repository;
  35.  
  36. public ProjectorA(IRepository repository)
  37. {
  38. _repository = repository;
  39. }
  40.  
  41. public void Handle(EventA evt)
  42. {
  43. // do something with EventA
  44. }
  45.  
  46. public void Handle(EventB evt)
  47. {
  48. // do something with EventB
  49. }
  50. }
  51.  
  52. public class ProjectorB : IEventHandler<EventA>
  53. {
  54. private readonly IRepository _repository;
  55.  
  56. public ProjectorA(IRepository repository)
  57. {
  58. _repository = repository;
  59. }
  60.  
  61. public void Handle(EventA evt)
  62. {
  63. // do something with EventA
  64. }
  65.  
  66. // I don't care about EventB so I don't subscribe to it
  67. }
  68.  
  69. public interface IEventHandler<in TDomainEvent>
  70. : IEventHandler
  71. where TDomainEvent : IDomainEvent
  72. {
  73. void Handle(TDomainEvent evt);
  74. }
Add Comment
Please, Sign In to add comment