public void ConfigureServices(IServiceCollection services) { services.AddCors(); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options => { var secret = Configuration["HmacSecret"]; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)); options.TokenValidationParameters = new TokenValidationParameters { IssuerSigningKey = key, RequireExpirationTime = true, ValidateIssuerSigningKey = true, ValidateIssuer = false, ValidateLifetime = true, ValidateAudience = false }; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddSingleton <IApiVersionDescriptionProvider, DefaultApiVersionDescriptionProvider>(); services.AddMvc(options => { options.RespectBrowserAcceptHeader = true; options.OutputFormatters.Add(new CsvOutputFormatter(GetCsvOptions())); options.FormatterMappings.SetMediaTypeMappingForFormat("csv", MediaTypeHeaderValue.Parse("text/csv")); var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddCsvSerializerFormatters(GetCsvOptions()); var assetRegister = new AssetRegister(); assetRegister.ExportDependencies((type, provider) => services.AddTransient(type, _ => provider())); assetRegister.ExportTypeDependencies((type, provider) => services.AddTransient(type, provider)); assetRegister.ExportSingletonDependencies((type, provider) => services.AddSingleton(type, _ => provider())); assetRegister.ExportSingletonTypeDependencies((type, provider) => services.AddSingleton(type, provider)); services.ConfigureDocumentation(_apiName); services .AddEntityFrameworkNpgsql() .AddDbContext <AssetRegisterContext>(); AssetRegisterContext assetRegisterContext = services.BuildServiceProvider().GetService <AssetRegisterContext>(); assetRegisterContext.Database.Migrate(); services.AddHostedService <BackgroundProcessor>(); }