Merge pull request #2038 from abpframework/maliming/patch-4

Add a delegate to configure IHttpClientBuilder in AddHttpClientProxy method.
pull/2165/head
Halil İbrahim Kalkan 6 years ago committed by GitHub
commit 8a74d4bca1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -29,11 +29,15 @@ namespace Microsoft.Extensions.DependencyInjection
/// <param name="asDefaultServices">
/// True, to register the HTTP client proxy as the default implementation for the services.
/// </param>
/// <param name="configureHttpClientBuilder">
/// A delegate that is used to configure an <see cref="T:Microsoft.Extensions.DependencyInjection.IHttpClientBuilder" />.
/// </param>
public static IServiceCollection AddHttpClientProxies(
[NotNull] this IServiceCollection services,
[NotNull] Assembly assembly,
[NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName,
bool asDefaultServices = true)
bool asDefaultServices = true,
Action<IHttpClientBuilder> configureHttpClientBuilder = null)
{
Check.NotNull(services, nameof(assembly));
@ -49,7 +53,8 @@ namespace Microsoft.Extensions.DependencyInjection
services.AddHttpClientProxy(
serviceType,
remoteServiceConfigurationName,
asDefaultServices
asDefaultServices,
configureHttpClientBuilder
);
}
@ -68,15 +73,20 @@ namespace Microsoft.Extensions.DependencyInjection
/// <param name="asDefaultService">
/// True, to register the HTTP client proxy as the default implementation for the service <typeparamref name="T"/>.
/// </param>
/// <param name="configureHttpClientBuilder">
/// A delegate that is used to configure an <see cref="T:Microsoft.Extensions.DependencyInjection.IHttpClientBuilder" />.
/// </param>
public static IServiceCollection AddHttpClientProxy<T>(
[NotNull] this IServiceCollection services,
[NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName,
bool asDefaultService = true)
bool asDefaultService = true,
Action<IHttpClientBuilder> configureHttpClientBuilder = null)
{
return services.AddHttpClientProxy(
typeof(T),
remoteServiceConfigurationName,
asDefaultService
asDefaultService,
configureHttpClientBuilder
);
}
@ -92,11 +102,15 @@ namespace Microsoft.Extensions.DependencyInjection
/// <param name="asDefaultService">
/// True, to register the HTTP client proxy as the default implementation for the service <paramref name="type"/>.
/// </param>
/// <param name="configureHttpClientBuilder">
/// A delegate that is used to configure an <see cref="T:Microsoft.Extensions.DependencyInjection.IHttpClientBuilder" />.
/// </param>
public static IServiceCollection AddHttpClientProxy(
[NotNull] this IServiceCollection services,
[NotNull] Type type,
[NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName,
bool asDefaultService = true)
bool asDefaultService = true,
Action<IHttpClientBuilder> configureHttpClientBuilder = null)
{
Check.NotNull(services, nameof(services));
Check.NotNull(type, nameof(type));
@ -108,10 +122,17 @@ namespace Microsoft.Extensions.DependencyInjection
});
//use IHttpClientFactory and polly
services.AddHttpClient(remoteServiceConfigurationName)
.AddTransientHttpErrorPolicy(builder =>
var httpClientBuilder = services.AddHttpClient(remoteServiceConfigurationName);
if (configureHttpClientBuilder == null)
{
httpClientBuilder.AddTransientHttpErrorPolicy(builder =>
// retry 3 times
builder.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i))));
}
else
{
configureHttpClientBuilder.Invoke(httpClientBuilder);
}
var interceptorType = typeof(DynamicHttpProxyInterceptor<>).MakeGenericType(type);
services.AddTransient(interceptorType);

Loading…
Cancel
Save