public SpotifyService(
     ConfiguracaoSpotify config,
     IHttpClientFactory httpClientFactory,
     IGenericRepository <Categoria> categoriaRepository,
     IGenericRepository <Disco> discoRepository)
 {
     _config              = config;
     _httpClientFactory   = httpClientFactory;
     _categoriaRepository = categoriaRepository;
     _discoRepository     = discoRepository;
     _clientPolicySpotify = CriarPoliticaDeTentativa();
 }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            //Banco em Memória para poder publicar no Azure
            //services.AddDbContext<EcommerceContext>(options => options.UseInMemoryDatabase(databaseName: "VendasDatabase"));

            services.AddDbContext<EcommerceContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            //Cria um única instancia das configurações do spotify
            var config = new ConfiguracaoSpotify();
            Configuration.Bind("ConfiguracaoSpotify", config);
            services.AddSingleton(config);

            //Criando a injeção de dependência do service
            services.AddScoped<ISpotifyService, SpotifyService>();

            //Configura o http cliente do spotify
            services.AddHttpClient("spotifyCliente", cfg =>
            {
                cfg.BaseAddress = new Uri(config.UrlBase);
                cfg.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            })
            .ConfigurePrimaryHttpMessageHandler(h => new HttpClientHandler()
            {
                AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip,
            });

            services.AddScoped<ISpotifyService, SpotifyService>();

            services.AddScoped<IGenericRepository<Categoria>, CategoriaRepository>();
            services.AddScoped<IGenericRepository<Cliente>, ClienteRepository>();
            services.AddScoped<IGenericRepository<Disco>, DiscoRepository>();
            services.AddScoped<IGenericRepository<Venda>, VendaRepository>();
            services.AddScoped<IGenericRepository<VendaItem>, VendaItemRepository>();

            services.AddScoped<IBusinessFactory<ICashbackBusiness>, BusinessFactory<ICashbackBusiness>>();

            services.AddScoped<IVendaBusiness, VendaBusiness>();

            //Registra o mapeamento da view model
            MapeamentoViewModel.RegistrarMapeamento(services);

            //Preparando o Swagger
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1.0", new OpenApiInfo
                {
                    Version = "v1.0",
                    Title = "API - Ecommerce de disco de vinil com cashback",
                    Description = "API em Asp .Net Core 3.1 para ecommerce de disco de vinil com cashback",
                    Contact = new OpenApiContact
                    {
                        Name = "Wellington Alves da Silva",
                        Email = "*****@*****.**",
                        Url = new Uri("https://github.com/wellingtonalvesdasilva")
                    }
                });

                //Obtendo o diretório e depois o nome do arquivo .xml de comentários
                //var applicationBasePath = PlatformServices.Default.Application.ApplicationBasePath;
                //var applicationName = PlatformServices.Default.Application.ApplicationName;
                //var xmlDocumentPath = Path.Combine(applicationBasePath, $"{applicationName}.xml");
                //c.IncludeXmlComments(xmlDocumentPath);
            });
        }