using System.IO.Abstractions; using System.Net; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.DependencyInjection; using Polly; using Polly.Extensions.Http; using RdtClient.Service.BackgroundServices; using RdtClient.Service.Middleware; using RdtClient.Service.Services; using RdtClient.Service.Services.TorrentClients; using RdtClient.Service.Wrappers; namespace RdtClient.Service; public static class DiConfig { public const String RD_CLIENT = "RdClient"; public static void RegisterRdtServices(this IServiceCollection services) { services.AddSingleton(); services.AddScoped(); services.AddSingleton(); services.AddSingleton(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddSingleton(); services.AddSingleton(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); } public static void RegisterHttpClients(this IServiceCollection services) { services.AddHttpClient(); var retryPolicy = HttpPolicyExtensions .HandleTransientHttpError() .OrResult(r => r.StatusCode == HttpStatusCode.TooManyRequests) .WaitAndRetryAsync(retryCount: 5, sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt))); services.AddHttpClient(RD_CLIENT) .AddPolicyHandler(retryPolicy); } }