diff --git a/src/Discord.Net.Rest/Extensions/ServiceCollectionExtensions.cs b/src/Discord.Net.Rest/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 000000000..8cf85e118 --- /dev/null +++ b/src/Discord.Net.Rest/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,69 @@ +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 + { + public static IServiceCollection AddScopedDiscordRestClient(this IServiceCollection services, bool useProxy = false) + { + services.AddHttpClient("HttpFactoryRestClientProvider") + .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler + { + AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, + UseCookies = false, + UseProxy = useProxy, + }); + + + + services.AddTransient(provider => new HttpFactoryRestClientProvider(provider.GetRequiredService())); + services.AddScoped(provider => + { + var config = new DiscordRestConfig + { + RestClientProvider = provider.GetRequiredService().Instance + }; + return new DiscordRestClient(config); + }); + + return services; + } + + 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("HttpFactoryRestClientProvider") + .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler + { + AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, + UseCookies = false, + UseProxy = useProxy, + }); + + + + services.AddTransient(provider => new HttpFactoryRestClientProvider(provider.GetRequiredService())); + services.AddTransient(provider => + { + var config = new DiscordRestConfig + { + RestClientProvider = provider.GetRequiredService().Instance + }; + return new DiscordRestClient(config); + }); + + return services; + } + } +}