public DefaultChannelConfiguration(IChannel channel, IRecvByteBufAllocator allocator)
        {
            Contract.Requires(channel != null);

            this.Channel = channel;
            if (allocator is IMaxMessagesRecvByteBufAllocator maxMessagesAllocator)
            {
                maxMessagesAllocator.MaxMessagesPerRead = channel.Metadata.DefaultMaxMessagesPerRead;
            }
            else if (allocator == null)
            {
                throw new ArgumentNullException(nameof(allocator));
            }
            this.RecvByteBufAllocator = allocator;
        }
        public DefaultChannelConfiguration(IChannel channel, IRecvByteBufAllocator allocator)
        {
            if (channel is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.channel);
            }

            Channel = channel;
            if (allocator is IMaxMessagesRecvByteBufAllocator maxMessagesAllocator)
            {
                maxMessagesAllocator.MaxMessagesPerRead = channel.Metadata.DefaultMaxMessagesPerRead;
            }
            else if (allocator is null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.allocator);
            }
            RecvByteBufAllocator = allocator;
        }