using System.Net.Http.Headers; using Microsoft.Extensions.Configuration; using Polly; using Polly.Extensions.Http; using Wallabag.Client; using Wallabag.Client.Contracts; using Wallabag.Client.OAuth; using Wallabag.Client.Options; // ReSharper disable once CheckNamespace namespace Microsoft.Extensions.DependencyInjection; public static class ServiceRegistrationExtensions { public static IServiceCollection Add_Wallabag_HttpClient(this IServiceCollection services, IConfiguration configuration) { var configSection = configuration.GetSection(WallabagSettings.Position); services.Configure(configSection); // services.AddScoped(); // services.AddScoped(); services.AddSingleton(); services.AddSingleton(); services.AddHttpClient() .SetHandlerLifetime(TimeSpan.FromMinutes(5)) //Set lifetime to five minutes .AddPolicyHandler(GetRetryPolicy()); // services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); return services; } static IAsyncPolicy GetRetryPolicy() { return HttpPolicyExtensions .HandleTransientHttpError() .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound) .WaitAndRetryAsync(6, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))); } }