public RabbitMQSubscription(
            IModel channel,
            RabbitMQChannelEventsHandler channelEvents,
            Action <byte[], IMessageContext> handler,
            RabbitMQConfiguration configuration,
            RabbitMQMessaging messaging,
            ILoggerFactory loggerFactory,
            params string[] queues)
        {
            this.channel = channel ??
                           throw new ArgumentNullException(nameof(channel));

            this.channelEvents = channelEvents ??
                                 throw new ArgumentNullException(nameof(channelEvents));

            this.handler = handler ??
                           throw new ArgumentNullException(nameof(handler));

            this.configuration = configuration ??
                                 throw new ArgumentNullException(nameof(configuration));

            this.messaging = messaging ??
                             throw new ArgumentNullException(nameof(messaging));

            this.queues = queues ??
                          throw new ArgumentNullException(nameof(queues));

            logger = loggerFactory?.CreateLogger <RabbitMQSubscription>() ??
                     throw new ArgumentNullException(nameof(loggerFactory));

            consumersToQueues = new Dictionary <string, string>();
        }
        public RabbitMQPublisher(
            IModel channel,
            RabbitMQChannelEventsHandler channelEvents,
            uint timeout,
            RabbitMQMessaging messaging,
            ILoggerFactory loggerFactory)
        {
            this.channel = channel ?? throw new ArgumentNullException(nameof(channel));

            this.channelEvents = channelEvents ??
                                 throw new ArgumentNullException(nameof(channelEvents));

            this.timeout = TimeSpan.FromMilliseconds(timeout);

            this.messaging = messaging ??
                             throw new ArgumentNullException(nameof(messaging));

            logger = loggerFactory?.CreateLogger <RabbitMQPublisher>() ??
                     throw new ArgumentNullException(nameof(loggerFactory));

            channel.ConfirmSelect();
        }