using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using FarmmapsApi.HttpMessageHandlers; using FarmmapsApi.Models; using FarmmapsApi.Services; using IdentityModel.Client; using Microsoft.Extensions.DependencyInjection; namespace FarmmapsApi { public static class Extensions { public static IServiceCollection AddFarmmapsServices(this IServiceCollection serviceCollection, Configuration configuration) { return serviceCollection .AddSingleton(configuration) .AddSingleton(sp => { var httpFactory = sp.GetRequiredService(); return new DiscoveryCache(configuration.DiscoveryEndpointUrl, () => httpFactory.CreateClient()); }) .AddSingleton() .AddSingleton() .AddTransient() .AddTransient() .AddHttpClient() .AddHttpMessageHandler() .Services; } public static async Task PollTask(TimeSpan retryTime, Func callback) { var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; do { try { await callback(tokenSource); await Task.Delay(retryTime, token); } catch { // ignored } } while (!token.IsCancellationRequested); } } }