public static EventHandlerFactory NewEventHandlerFactory( Func <IRepository> aggregateRepositoryProvider, Func <IRepository> sagaRepositoryProvider, Func <IShoppingCartReadModelRepository> readModelRepositoryProvider, Func <IOrderReadModelRepository> orderReadModelRepositoryProvider, Func <IContextEventProducer> contextEventProducerProvider) { var eventHandlerFactory = new EventHandlerFactory(); eventHandlerFactory.RegisterFactory( () => new ShoppingCartEventHandler(readModelRepositoryProvider()), typeof(CartCreated), typeof(ProductAddedToCart), typeof(ProductRemovedFromCart), typeof(CartEmptied), typeof(CartCheckedOut)); eventHandlerFactory.RegisterFactory( () => new EventProcessing.ContextEventHandler(contextEventProducerProvider()), typeof(CompletedForShipping)); eventHandlerFactory.RegisterFactory( () => new ShippingEventHandler(sagaRepositoryProvider()), typeof(CartCheckedOut), typeof(OrderCreated), typeof(PaymentReceived), typeof(ShippingAddressProvided), typeof(PaymentConfirmed), typeof(AddressConfirmed)); eventHandlerFactory.RegisterFactory( () => new OrderEventHandler(orderReadModelRepositoryProvider()), typeof(OrderCreated), typeof(PaymentReceived), typeof(ShippingAddressProvided), typeof(OrderShipped), typeof(OrderDelivered), typeof(OrderCompleted)); return(eventHandlerFactory); }
public static EventHandlerFactory NewEventHandlerFactory( Func <IRepository> aggregateRepositoryProvider, Func <IShipmentReadModelRepository> readModelRepositoryProvider, Func <IContextEventProducer> contextEventProducerProvider) { var eventHandlerFactory = new EventHandlerFactory(); eventHandlerFactory.RegisterFactory( () => new EventProcessing.ShipmentEventHandler(aggregateRepositoryProvider()), typeof(OrderCompletedForShipping)); eventHandlerFactory.RegisterFactory( () => new Readmodels.Shipping.ShipmentEventHandler(readModelRepositoryProvider()), typeof(ShipmentCreated), typeof(ShipmentStarted), typeof(ShipmentDelivered)); eventHandlerFactory.RegisterFactory( () => new ContextEventHandler(contextEventProducerProvider()), typeof(ShipmentDelivered)); return(eventHandlerFactory); }