public static IServiceCollection AddQueueHandler <T>(
            this IServiceCollection services,
            ServiceBusQueueSettings <T> settings)
        {
            services.AddScoped(provider => settings);
            services.AddScoped(typeof(IReceiverSettings <T>), provider => settings);
            services.AddScoped(typeof(IMessageSender <T>), typeof(DefaultMessageSender <T>));
            services.AddScoped <IQueueClient <T>, ServiceBusQueueClient <T> >();

            return(services);
        }
        public ServiceBusQueueClient(
            ServiceBusQueueSettings <T> settings,
            ILogger <ServiceBusQueueClient <T> > logger,
            IMessageSender <T> messageSender)
        {
            settings = settings ?? throw new ArgumentNullException(nameof(settings));
            _logger  = logger ?? throw new ArgumentNullException(nameof(logger));

            if (!settings.IsValid)
            {
                _logger.LogError("Invalid Service Bus queue settings passed.");
                throw new ArgumentException($"Invalid {nameof(ServiceBusQueueSettings<T>)}", nameof(settings));
            }

            _messageSender = messageSender;
            _queueClient   = new QueueClient(settings.ConnectionString, settings.QueueName);
        }