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");
        }
Exemplo n.º 2
0
        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");
        }
Exemplo n.º 3
0
        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));
        }