public virtual void ConfigureServices(IServiceCollection services) { // Call Back BeforeConfigureServices?.Invoke(services); // Logger services.AddLogging(builder => { builder.AddConsole(); builder.SetMinimumLevel(LogLevel.Information); }); // Mapper services.AddElectAutoMapper(); // Http Context services.AddElectHttpContext(); // Server Info services.AddElectServerInfo(); // Blazor services.AddHeadElementHelper(); services.AddRazorPages(); services.AddServerSideBlazor(); // Response Compress services.Configure <BrotliCompressionProviderOptions>(options => { options.Level = CompressionLevel.Optimal; }); services.Configure <GzipCompressionProviderOptions>(options => { options.Level = CompressionLevel.Optimal; }); services.AddResponseCompression(options => { options.Providers.Add <BrotliCompressionProvider>(); options.Providers.Add <GzipCompressionProvider>(); }); // DI services.AddElectDI(); services.PrintServiceAddedToConsole(); Console.ResetColor(); // Call Back AfterConfigureServices?.Invoke(services); }
public virtual void ConfigureServices(IServiceCollection services) { // Call Back BeforeConfigureServices?.Invoke(services); // Logger services.AddLogging(builder => { builder.AddConsole(); builder.SetMinimumLevel(LogLevel.Information); }); // Mapper services.AddElectAutoMapper(); // Http Context services.AddElectHttpContext(); // Server Info services.AddElectServerInfo(); // API Doc - Swagger var electSwaggerOptions = Elect.Web.Swagger.IServiceCollectionExtensions.GetOptions(Configuration); services.AddElectSwagger(electSwaggerOptions); // Health Check var electHealthCheckOptions = Elect.Web.HealthCheck.IServiceCollectionExtensions.GetOptions(Configuration); services.AddElectHealthCheck(electHealthCheckOptions); // Background Job - Hangfire var electHangfireOptions = Elect.Job.Hangfire.IServiceCollectionExtensions.GetOptions(Configuration); services.AddElectHangfire(electHangfireOptions); // Consul var electConsulOptions = Elect.Web.Consul.IServiceCollectionExtensions.GetOptions(Configuration); services.AddElectConsul(electConsulOptions); // Jaeger var electJaegerOptions = Elect.Jaeger.IServiceCollectionExtensions.GetOptions(Configuration); services.AddElectJaeger(electJaegerOptions); // MVC // MVC Core var mvcCoreBuilder = services.AddMvcCore(options => { options.EnableEndpointRouting = false; }); // Callback BeforeConfigureMvc?.Invoke(mvcCoreBuilder); mvcCoreBuilder.AddDataAnnotations(); mvcCoreBuilder.AddApiExplorer(); // API Doc - Swagger Needed mvcCoreBuilder.AddFormatterMappings(); // Action Context Accessor services.AddSingleton <IActionContextAccessor, ActionContextAccessor>(); // Model Binder services.AddDateTimeOffsetBinder(); services.AddDateTimeBinder(); services.AddTimeSpanBinder(); // MVC Json Config mvcCoreBuilder.AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter()); options.JsonSerializerOptions.Converters.Add(new DateTimeOffsetJsonConverter()); options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter()); options.JsonSerializerOptions.Converters.Add(new TimeSpanJsonConverter()); }); // Fluent Validation mvcCoreBuilder.AddFluentValidation(fvc => { foreach (var type in RegisterValidators) { fvc.RegisterValidatorsFromAssemblyContaining(type); } fvc.ImplicitlyValidateChildProperties = true; }); // Callback AfterConfigureMvc?.Invoke(mvcCoreBuilder); // Cors services.AddElectCors(); // Response Compress services.Configure <BrotliCompressionProviderOptions>(options => { options.Level = CompressionLevel.Optimal; }); services.Configure <GzipCompressionProviderOptions>(options => { options.Level = CompressionLevel.Optimal; }); services.AddResponseCompression(options => { options.Providers.Add <BrotliCompressionProvider>(); options.Providers.Add <GzipCompressionProvider>(); }); // DI services.AddElectDI(); services.PrintServiceAddedToConsole(); Console.ResetColor(); // Call Back AfterConfigureServices?.Invoke(services); }