// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddLogging() .AddHttpLogging(options => { options.LoggingFields = HttpLoggingFields.RequestPropertiesAndHeaders | HttpLoggingFields.RequestBody; }); DiscordBotConfiguration botConfiguration = LoadDiscordConfig(); services.AddSingleton(botConfiguration); // register the bot for DI services.AddSingleton <IDiscordBot, DiscordBot>() .AddSingleton(x => (DiscordBot)x.GetRequiredService <IDiscordBot>()); // register publishers services.AddSingleton <IPublisher <Push>, PushPublisher>() .AddSingleton <IPublisher <Status>, StatusPublisher>() .AddSingleton <IPublisher <Deploy>, DeployPublisher>() .AddSingleton <IOctopusClientFactory, OctopusClientFactory>(); string uri = this.Configuration.GetValue <string>(key: @"ServerOctopus:Url"); string apiKey = this.Configuration.GetValue <string>(key: @"ServerOctopus:ApiKey"); OctopusServerEndpoint ose = new(octopusServerAddress : uri, apiKey : apiKey); services.AddSingleton(ose); // Add framework services services.Configure <GzipCompressionProviderOptions>(configureOptions: options => options.Level = CompressionLevel.Fastest) .Configure <BrotliCompressionProviderOptions>(configureOptions: options => options.Level = CompressionLevel.Fastest) .AddResponseCompression(configureOptions: options => { options.EnableForHttps = true; // Explicitly enable Gzip options.Providers.Add <BrotliCompressionProvider>(); options.Providers.Add <GzipCompressionProvider>(); // Add Custom mime types options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "image/svg+xml" }); }) .AddMvc() .AddMvcOptions(setupAction: _ => { // Note Additional ModelMetadata providers that require DI are enabled elsewhere }) .AddJsonOptions(configure: options => JsonSerialiser.Configure(options.JsonSerializerOptions)); services.AddRouting(); services.AddHostedService <BotService>(); }