From 0aa6d6f000b149407f0149eda12a32d4b2283f07 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Oct 2019 11:18:33 +0800 Subject: [PATCH] Add a delegate to configure IHttpClientBuilder in AddHttpClientProxy method. --- ...lectionDynamicHttpClientProxyExtensions.cs | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs index b716a9cd9e..1ccf7a2af5 100644 --- a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs +++ b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs @@ -29,11 +29,15 @@ namespace Microsoft.Extensions.DependencyInjection /// /// True, to register the HTTP client proxy as the default implementation for the services. /// + /// + /// A delegate that is used to configure an . + /// public static IServiceCollection AddHttpClientProxies( [NotNull] this IServiceCollection services, [NotNull] Assembly assembly, [NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName, - bool asDefaultServices = true) + bool asDefaultServices = true, + Action 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 /// /// True, to register the HTTP client proxy as the default implementation for the service . /// + /// + /// A delegate that is used to configure an . + /// public static IServiceCollection AddHttpClientProxy( [NotNull] this IServiceCollection services, [NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName, - bool asDefaultService = true) + bool asDefaultService = true, + Action configureHttpClientBuilder = null) { return services.AddHttpClientProxy( typeof(T), remoteServiceConfigurationName, - asDefaultService + asDefaultService, + configureHttpClientBuilder ); } @@ -92,11 +102,15 @@ namespace Microsoft.Extensions.DependencyInjection /// /// True, to register the HTTP client proxy as the default implementation for the service . /// + /// + /// A delegate that is used to configure an . + /// public static IServiceCollection AddHttpClientProxy( [NotNull] this IServiceCollection services, [NotNull] Type type, [NotNull] string remoteServiceConfigurationName = RemoteServiceConfigurationDictionary.DefaultName, - bool asDefaultService = true) + bool asDefaultService = true, + Action 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);