public static void UseEventMessageProcessor(
            this IAppBuilder app,
            EventProcessorHost eventProcessorHost,
            EventDataSerializer serializer,
            IMessageHandler messageHandler,
            IMessageProcessingExceptionHandler <EventData> exceptionHandler)
        {
            if (app == null)
            {
                throw new ArgumentNullException(nameof(app));
            }

            if (eventProcessorHost == null)
            {
                throw new ArgumentNullException(nameof(eventProcessorHost));
            }

            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            if (messageHandler == null)
            {
                throw new ArgumentNullException(nameof(messageHandler));
            }

            if (exceptionHandler == null)
            {
                throw new ArgumentNullException(nameof(exceptionHandler));
            }

            CancellationToken cancellationToken = new AppProperties(app.Properties).OnAppDisposing;

            var processorFactory = new EventMessageProcessorFactory(
                serializer,
                messageHandler,
                exceptionHandler,
                cancellationToken);

            Start(eventProcessorHost, processorFactory);

            cancellationToken.Register(() => Stop(eventProcessorHost));
        }
 private static void Start(
     EventProcessorHost eventProcessorHost,
     EventMessageProcessorFactory processorFactory) =>
 eventProcessorHost.RegisterEventProcessorFactoryAsync(processorFactory).Wait();