diff --git a/src/clients/Elsa.Api.Client/Contracts/IElsaClientFactory.cs b/src/clients/Elsa.Api.Client/Contracts/IElsaClientFactory.cs
index e196626b8..cf109850e 100644
--- a/src/clients/Elsa.Api.Client/Contracts/IElsaClientFactory.cs
+++ b/src/clients/Elsa.Api.Client/Contracts/IElsaClientFactory.cs
@@ -1,5 +1,4 @@
using Elsa.Api.Client.Options;
-using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Api.Client.Contracts;
@@ -11,5 +10,5 @@ public interface IElsaClientFactory
///
/// Creates a new instance.
///
- IElsaClient CreateClient(Action configureOptions, Action? configureHttpClientBuilder = default);
+ IElsaClient CreateClient(Action configureOptions, Action? configureHttpClientBuilder = default);
}
\ No newline at end of file
diff --git a/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs
index 449723cd7..fe8a75b8a 100644
--- a/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs
+++ b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs
@@ -32,38 +32,39 @@ public static class DependencyInjectionExtensions
///
/// Adds the Elsa client to the service collection.
///
- public static IServiceCollection AddElsaClient(this IServiceCollection services, Action? configureOptions = default, Action? configureHttpClientBuilder = default)
+ public static IServiceCollection AddElsaClient(this IServiceCollection services, Action? configureOptions = default, Action? configureBuilderOptions = default)
{
+ var builderOptions = new ElsaClientBuilderOptions();
+ configureBuilderOptions?.Invoke(builderOptions);
+
services.Configure(configureOptions ?? (_ => { }));
services.AddScoped();
services.AddScoped();
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
- services.AddApi(CreateRefitSettings, configureHttpClientBuilder);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
+ services.AddApi(builderOptions);
return services;
}
-
+
///
/// Adds a refit client for the specified API type.
///
/// The service collection.
- /// The refit settings.
- /// A delegate to configure the HTTP client builder.
- /// The API type.
- public static void AddApi(this IServiceCollection services, Func settings, Action? configureHttpClientBuilder = default) where T : class
+ /// An options object that can be used to configure the HTTP client builder.
+ /// The type representing the API.
+ public static void AddApi(this IServiceCollection services, ElsaClientBuilderOptions? httpClientBuilderOptions = default) where T : class
{
- var builder = services.AddRefitClient(settings).ConfigureHttpClient(ConfigureElsaApiHttpClient);
- builder.AddHttpMessageHandler();
- configureHttpClientBuilder?.Invoke(builder);
+ var builder = services.AddRefitClient(CreateRefitSettings).ConfigureHttpClient(ConfigureElsaApiHttpClient);
+ httpClientBuilderOptions?.ConfigureHttpClientBuilder?.Invoke(builder);
}
///
@@ -98,6 +99,8 @@ public static class DependencyInjectionExtensions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};
+
+ var elsaClientOptions = serviceProvider.GetRequiredService>().Value;
serializerOptions.Converters.Add(new JsonStringEnumConverter());
serializerOptions.Converters.Add(new VersionOptionsJsonConverter());
@@ -106,7 +109,7 @@ public static class DependencyInjectionExtensions
var settings = new RefitSettings
{
ContentSerializer = new SystemTextJsonContentSerializer(serializerOptions),
- HttpMessageHandlerFactory = serviceProvider.GetRequiredService
+ HttpMessageHandlerFactory = () => elsaClientOptions.HttpMessageHandlerFactory(serviceProvider)
};
return settings;
diff --git a/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs b/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs
new file mode 100644
index 000000000..ab406a218
--- /dev/null
+++ b/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs
@@ -0,0 +1,16 @@
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Elsa.Api.Client.Options;
+
+///
+/// Represents options for building an Elsa API client.
+///
+public class ElsaClientBuilderOptions
+{
+ ///
+ /// Gets or sets a delegate that can be used to configure the HTTP client builder.
+ ///
+ public Action? ConfigureHttpClientBuilder { get; set; }
+
+
+}
\ No newline at end of file
diff --git a/src/clients/Elsa.Api.Client/Options/ElsaClientOptions.cs b/src/clients/Elsa.Api.Client/Options/ElsaClientOptions.cs
index 6ed518720..afea1c581 100644
--- a/src/clients/Elsa.Api.Client/Options/ElsaClientOptions.cs
+++ b/src/clients/Elsa.Api.Client/Options/ElsaClientOptions.cs
@@ -1,3 +1,6 @@
+using Elsa.Api.Client.HttpMessageHandlers;
+using Microsoft.Extensions.DependencyInjection;
+
namespace Elsa.Api.Client.Options;
///
@@ -19,4 +22,9 @@ public class ElsaClientOptions
/// Gets or sets a delegate that can be used to configure the HTTP client.
///
public Action? ConfigureHttpClient { get; set; }
+
+ ///
+ /// Gets or sets a delegate that can be used to configure the HTTP client message handler.
+ ///
+ public Func HttpMessageHandlerFactory { get; set; } = sp => sp.GetRequiredService();
}
\ No newline at end of file
diff --git a/src/clients/Elsa.Api.Client/Services/ElsaClientFactory.cs b/src/clients/Elsa.Api.Client/Services/ElsaClientFactory.cs
index 6c1cde6fa..70af8a786 100644
--- a/src/clients/Elsa.Api.Client/Services/ElsaClientFactory.cs
+++ b/src/clients/Elsa.Api.Client/Services/ElsaClientFactory.cs
@@ -11,7 +11,7 @@ namespace Elsa.Api.Client.Services;
public class ElsaClientFactory : IElsaClientFactory
{
///
- public IElsaClient CreateClient(Action configureOptions, Action? configureHttpClientBuilder = default)
+ public IElsaClient CreateClient(Action configureOptions, Action? configureHttpClientBuilder = default)
{
var services = new ServiceCollection().AddElsaClient(configureOptions, configureHttpClientBuilder).BuildServiceProvider();
return services.GetRequiredService();