public IEventProcessorConfiguration RegisterEventHandlers(ISessionMessagePump receiver, Action <IFluentMessageHandlerRegistration <IEventHandler> > config)
        {
            // Create configuration object and call external configuration.
            var handlers = new FluentMessageHandlerRegistration <IEventHandler>(typeof(IEventHandler <>));

            config(handlers);

            // Register handlers.
            RegisterEventHandlers(receiver, handlers);

            // Continue.
            return(this);
        }
        public static ICommandProcessorConfiguration RegisterCommandHandlers(this ICommandProcessorConfiguration configuration, ISessionMessagePump receiver, Action <IFluentMessageHandlerRegistration <ICommandHandler> > config)
        {
            // Create configuration object and call external configuration.
            var handlers = new FluentMessageHandlerRegistration <ICommandHandler>(typeof(ICommandHandler <>));

            config(handlers);

            // Register handlers.
            configuration.RegisterCommandHandlers(receiver, handlers);

            // Continue.
            return(configuration);
        }
        public void WithShouldRegisterHandlersCorrectly()
        {
            // Arrange.
            var handler = new FluentMessageHandlerRegistration <ICommandHandler>(typeof(ICommandHandler <>));

            // Act.
            handler
            .With <ConfirmOrderCommandHandler>()
            .With <RemoveOrderCommandHandler>();
            var registrations = handler.GetRegistrations();

            // Assert.
            Assert.Equal(3, registrations.Count);
            Assert.Equal(typeof(ConfirmOrderCommandHandler), registrations[typeof(ConfirmOrderCommand)][0]);
            Assert.Equal(typeof(RemoveOrderCommandHandler), registrations[typeof(DeleteOrderCommand)][0]);
            Assert.Equal(typeof(RemoveOrderCommandHandler), registrations[typeof(CancelOrderCommand)][0]);
        }
        public void WithShouldRegisterHandlersCorrectly()
        {
            // Arrange.
            var handler = new FluentMessageHandlerRegistration<ICommandHandler>(typeof(ICommandHandler<>));
            
            // Act.
            handler
                .With<ConfirmOrderCommandHandler>()
                .With<RemoveOrderCommandHandler>();
            var registrations = handler.GetRegistrations();

            // Assert.
            Assert.Equal(3, registrations.Count);
            Assert.Equal(typeof(ConfirmOrderCommandHandler), registrations[typeof(ConfirmOrderCommand)][0]);
            Assert.Equal(typeof(RemoveOrderCommandHandler), registrations[typeof(DeleteOrderCommand)][0]);
            Assert.Equal(typeof(RemoveOrderCommandHandler), registrations[typeof(CancelOrderCommand)][0]);
        }