public void Given() { var builder = new ContainerBuilder(); builder.RegisterModule(new AutofacModule()); IContainer container = builder.Build(); var factory = new EventReplayerFactory(container); _replayer = factory.Build("MHM.WinFlexOne.CQRS.Events.EventHandlers.Elections.ElectionAmountChangedEventHandler, MHM.WinFlexOne.CQRS.Events"); }
public void Given() { var builder = new ContainerBuilder(); builder.RegisterModule(new AutofacModule()); IContainer container = builder.Build(); var factory = new EventReplayerFactory(container); _replayer = factory.Build("MHM.WinFlexOne.CQRS.Events.EventHandlers.Elections.ElectionAmountChangedEventHandler, MHM.WinFlexOne.CQRS.Events"); }
public async Task <IHandlerRegistration> RegisterAsync <TEvent, TEntity>(IContextualProvider <IEventReplayer <TId, TEventBase, TEntityBase, TEvent, TEntity> > eventReplayerFactory) where TEvent : TEventBase where TEntity : TEntityBase { if (eventReplayerFactory == null) { throw new ArgumentNullException(nameof(eventReplayerFactory)); } IAsyncSingleHandlerRegistry <IEventReplayer <TId, TEventBase, TEntityBase> > handlerRegistry; ImmutableDictionary <Type, ImmutableDictionary <Type, IAsyncSingleHandlerRegistry <IEventReplayer <TId, TEventBase, TEntityBase> > > > current = _replayer, start, desired; do { start = current; if (start.TryGetValue(typeof(TEvent), out var perEventRegistry) && perEventRegistry.TryGetValue(typeof(TEntity), out handlerRegistry)) { break; } desired = start.Remove(typeof(TEvent)); handlerRegistry = new AsyncSingleHandlerRegistry <IEventReplayer <TId, TEventBase, TEntityBase> >(); perEventRegistry = (perEventRegistry ?? ImmutableDictionary <Type, IAsyncSingleHandlerRegistry <IEventReplayer <TId, TEventBase, TEntityBase> > > .Empty) .Add(typeof(TEntity), handlerRegistry); desired = desired.Add(typeof(TEvent), perEventRegistry); current = Interlocked.CompareExchange(ref _replayer, desired, start); }while (current != start); var untypedFactory = new EventReplayerFactory <TEvent, TEntity>(eventReplayerFactory); return(await HandlerRegistration.CreateRegistrationAsync(handlerRegistry, untypedFactory)); }