modified the ServicesCollectionExtentions to only add Singleton DiscordRestClient so that the DiscordRestClient is a singleton and we do not lose the rate limiter but the HttpClient is still regenareted every time the provider is called through the IHttpClientFactory instead of using new HttpClient(new HttpClientHandler).
//services.AddScoped<HttpClientFactoryRestClientProvider>(provider => new HttpClientFactoryRestClientProvider(provider.GetRequiredService<IHttpClientFactory>()));
//services.AddScoped<HttpClientFactoryRestClientProvider>(provider => new HttpClientFactoryRestClientProvider(provider.GetRequiredService<IHttpClientFactory>()));
services.AddScoped<DiscordRestClient>(provider =>
{
var config = new DiscordRestConfig
{
RestClientProvider = url => new HttpClientFactoryRestClient(url, provider.GetRequiredService<IHttpClientFactory>().CreateClient("HttpClientFactoryRestClientProvider"), useProxy)
};
return new DiscordRestClient(config);
});
return services;
}
/// <summary>
/// Adds the DiscordRestClient as a Transient Service to be able to use through DI.
/// </summary>
/// <param name="services">This is the IServiceCollection where all the services are located.</param>
/// <param name="useProxy">Set this to true to use proxies, default is false.</param>
/// <returns></returns>
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.AddTransient<HttpClientFactoryRestClientProvider>(provider => new HttpClientFactoryRestClientProvider(provider.GetRequiredService<IHttpClientFactory>()));