public SqsPoolerHostedService(
     AmazonSQSClient amazonSqsClient,
     SqsPoolerConfig config,
     IConsumerResolver consumerResolver,
     ILogger <SqsPoolerHostedService> logger)
 {
     _amazonSqsClient  = amazonSqsClient;
     _config           = config;
     _consumerResolver = consumerResolver;
     _logger           = logger;
 }
        public static IServiceCollection AddSqsPooler(
            this IServiceCollection services, SqsPoolerConfig config, Assembly[] assembliesWithConsumers)
        {
            services.AddSingleton(config);
            services.AddSingleton <IConsumerResolver, ConsumerResolver>();
            services.AddSingleton(x => new AmazonSQSClient(new AmazonSQSConfig
            {
                RegionEndpoint = RegionEndpoint.GetBySystemName(config.Region)
            }));

            services.AddTransient <IHostedService, SqsPoolerHostedService>();

            var types = assembliesWithConsumers.SelectMany(x => x.GetTypes())
                        .Where(x => x.IsClass && typeof(IConsumer).IsAssignableFrom(x))
                        .ToArray();

            foreach (var type in types)
            {
                services.AddSingleton(typeof(IConsumer), type);
            }

            return(services);
        }