using Elsa.Api.Client.Contracts; using Elsa.Api.Client.Options; using Elsa.Api.Client.Resources.WorkflowDefinitions.Contracts; using Elsa.Api.Client.Services; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Refit; namespace Elsa.Api.Client.Extensions; /// /// Provides extension methods for dependency injection. /// [PublicAPI] public static class DependencyInjectionExtensions { /// /// Adds the Elsa client to the service collection. /// public static IServiceCollection AddElsaClient(this IServiceCollection services, Action configureOptions) { services.Configure(configureOptions); services.AddSingleton(); var settings = new RefitSettings(); services.AddElsaApiClient(settings); return services; } /// /// Adds a refit client for the specified API type. /// /// The service collection. /// The refit settings. /// The API type. public static void AddElsaApiClient(this IServiceCollection services, RefitSettings settings) where T : class { services.AddRefitClient(settings).ConfigureHttpClient(ConfigureElsaApiHttpClient); } private static void ConfigureElsaApiHttpClient(IServiceProvider serviceProvider, HttpClient httpClient) { var options = serviceProvider.GetRequiredService>().Value; httpClient.BaseAddress = options.BaseAddress; } }