/// <summary>
        /// Consumes the message on a SelectiveConsumerChannel given the specified delegate
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="selectiveConsumer"></param>
        /// <returns></returns>
        public static ConsumerChannelConfigurator <TChannel> UsingSelectiveConsumer <TChannel>(
            this ChannelConnectionConfigurator <TChannel> configurator, SelectiveConsumer <TChannel> selectiveConsumer)
        {
            var consumerConfigurator = new SelectiveConsumerChannelConfiguratorImpl <TChannel>(selectiveConsumer);

            configurator.SetChannelConfigurator(consumerConfigurator);

            return(consumerConfigurator);
        }
        /// <summary>
        /// Add a consumer to the channel using the message type defined for the channel
        /// </summary>
        /// <typeparam name="TChannel">The channel type, specifies the type of message sent by the channel</typeparam>
        /// <param name="connectionConfigurator">The connection configurator</param>
        /// <param name="consumer">The consumer to add to the channel</param>
        /// <returns>A consumer configurator to customize the consumer settings</returns>
        public static ConsumerChannelConfigurator <TChannel> AddSelectiveConsumer <TChannel>(
            this ConnectionConfigurator <TChannel> connectionConfigurator,
            SelectiveConsumer <TChannel> consumer)
        {
            var configurator = new SelectiveConsumerChannelConfiguratorImpl <TChannel>(consumer);

            connectionConfigurator.RegisterChannelConfigurator(configurator);

            return(configurator);
        }