using Elsa.Common.Features; using Elsa.Extensions; using Elsa.Features.Abstractions; using Elsa.Features.Attributes; using Elsa.Features.Services; using Elsa.Http.ContentWriters; using Elsa.Http.Handlers; using Elsa.Http.Implementations; using Elsa.Http.Models; using Elsa.Http.Options; using Elsa.Http.Parsers; using Elsa.Http.Services; using Microsoft.Extensions.DependencyInjection; namespace Elsa.Http.Features; [DependsOn(typeof(MemoryCacheFeature))] public class HttpFeature : FeatureBase { public HttpFeature(IModule module) : base(module) { } public Action? ConfigureHttpOptions { get; set; } public Func HttpEndpointAuthorizationHandlerFactory { get; set; } = ActivatorUtilities.GetServiceOrCreateInstance; public Func HttpEndpointWorkflowFaultHandlerFactory { get; set; } = ActivatorUtilities.GetServiceOrCreateInstance; /// public override void Configure() { Module.UseWorkflowManagement(management => management.AddVariableTypes(new[] { typeof(HttpRequestHeaders), typeof(HttpRequestModel), typeof(HttpResponseModel) }, "HTTP").AddActivitiesFrom()); } /// public override void Apply() { var configureOptions = ConfigureHttpOptions ?? (options => { options.BasePath = "/workflows"; options.BaseUrl = new Uri("http://localhost"); }); Services.Configure(configureOptions); Services .AddHttpClient() .AddSingleton() .AddSingleton() .AddSingleton() .AddNotificationHandlersFrom() .AddHttpContextAccessor() // Add Content Parsers .AddSingleton() //Add Request Content Writers .AddSingleton() .AddSingleton() ; } }