Exemplo n.º 1
0
    // 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>();
    }