using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Http; using System.Net; using Discord.Net.Rest; using Discord.Rest.Net; namespace Discord.Rest.Extensions { /// /// Here you will find all the extensions to be able to add a Discord Client to an IServiceCollection /// public static class ServiceCollectionExtensions { /// /// Adds the DiscordRestClient as a Scoped Service to be able to use through DI. /// /// This is the IServiceCollection where all the services are located. /// Set this to true to use proxies, default is false. /// public static IServiceCollection AddScopedDiscordRestClient(this IServiceCollection services, bool useProxy = false) { services.AddHttpClient("HttpClientFactoryRestClientProvider") .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, UseCookies = false, UseProxy = useProxy, }); //services.AddScoped(provider => new HttpClientFactoryRestClientProvider(provider.GetRequiredService())); services.AddScoped(provider => { var config = new DiscordRestConfig { RestClientProvider = url => new HttpClientFactoryRestClient(url, provider.GetRequiredService().CreateClient("HttpClientFactoryRestClientProvider"), useProxy) }; return new DiscordRestClient(config); }); return services; } /// /// Adds the DiscordRestClient as a Transient Service to be able to use through DI. /// /// This is the IServiceCollection where all the services are located. /// Set this to true to use proxies, default is false. /// public static IServiceCollection AddTransientDiscordRestClient(this IServiceCollection services, bool useProxy = false) //where should we put this useProxy options, I haven't fully understood where the original code takes this from. { services.AddHttpClient("HttpClientFactoryRestClientProvider") .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, UseCookies = false, UseProxy = useProxy, }); //services.AddTransient(provider => new HttpClientFactoryRestClientProvider(provider.GetRequiredService())); services.AddTransient(provider => { var config = new DiscordRestConfig { RestClientProvider = url => new HttpClientFactoryRestClient(url, provider.GetRequiredService().CreateClient("HttpClientFactoryRestClientProvider"), useProxy) }; return new DiscordRestClient(config); }); return services; } } }