// 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); }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); //configurar objetos fortemente tipados var appSettingsSection = Configuration.GetSection("AppSettings"); services.Configure <AppSettings>(appSettingsSection); var appSettings = appSettingsSection.Get <AppSettings>(); //Banco em Memória para poder publicar no Azure ou em qualquer servidor sem banco ou teste if (CurrentEnvironment.IsEnvironment("Testing")) { services.AddDbContext <CadastroCRUDContext>(options => options.UseInMemoryDatabase(databaseName: "CrudCadastroDatabase")); } else { services.AddDbContext <CadastroCRUDContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); } //Registra a injeção de dependência dos repositorios services.AddScoped <IGenericRepository <Usuario>, UsuarioRepository>(); //Registra a injeção de dependência das regras de negócios services.AddScoped <IUsuarioBusiness, UsuarioBusiness>(); //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 - CRUD básico", Description = "API em Asp .Net Core 3.1 para CRUD básico de qualquer tabela", Contact = new OpenApiContact { Name = "Wellington Alves da Silva", Email = "*****@*****.**", Url = new Uri("https://github.com/wellingtonalvesdasilva") } }); var securitySchema = new OpenApiSecurityScheme { Description = "Cabecalho de autorização no header. Exemplo: \"Authorization: Bearer {token}\"", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.Http, Scheme = "bearer", Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }; c.AddSecurityDefinition("Bearer", securitySchema); var securityRequirement = new OpenApiSecurityRequirement { { securitySchema, new[] { "Bearer" } } }; c.AddSecurityRequirement(securityRequirement); }); //Configura o JWT var key = Encoding.ASCII.GetBytes(appSettings.ChaveSecretaToken); services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(x => { x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false }; }); //Configurar injeção dos serviços services.AddScoped <IAutenticacaoService, AutenticacaoService>(); //Customizar as exceções lançadas services.AddControllersWithViews(options => options.Filters.Add(typeof(ExceptionCustomizadaFilterAttribute))); }