public static ElsaOptionsBuilder AddAzureServiceBusActivities(this ElsaOptionsBuilder options, Action <AzureServiceBusOptions>?configure) { if (configure != null) { options.Services.Configure(configure); } else { options.Services.AddOptions <AzureServiceBusOptions>(); } options.Services .AddSingleton(CreateServiceBusConnection) .AddSingleton(CreateServiceBusManagementClient) .AddSingleton <BusClientFactory>() .AddSingleton <IQueueMessageSenderFactory>(sp => sp.GetRequiredService <BusClientFactory>()) .AddSingleton <IQueueMessageReceiverClientFactory>(sp => sp.GetRequiredService <BusClientFactory>()) .AddSingleton <ITopicMessageSenderFactory>(sp => sp.GetRequiredService <BusClientFactory>()) .AddSingleton <ITopicMessageReceiverFactory>(sp => sp.GetRequiredService <BusClientFactory>()) .AddSingleton <IServiceBusQueuesStarter, ServiceBusQueuesStarter>() .AddSingleton <IServiceBusTopicsStarter, ServiceBusTopicsStarter>() .AddStartupTask <StartServiceBusQueues>() .AddStartupTask <StartServiceBusTopics>() .AddBookmarkProvider <QueueMessageReceivedBookmarkProvider>() .AddBookmarkProvider <TopicMessageReceivedBookmarkProvider>() ; options.AddConsumer <RestartServiceBusQueuesConsumer, WorkflowDefinitionPublished>(); options.AddConsumer <RestartServiceBusQueuesConsumer, WorkflowDefinitionRetracted>(); options.AddConsumer <RestartServiceBusTopicsConsumer, WorkflowDefinitionPublished>(); options.AddConsumer <RestartServiceBusTopicsConsumer, WorkflowDefinitionRetracted>(); options .AddActivity <AzureServiceBusQueueMessageReceived>() .AddActivity <SendAzureServiceBusQueueMessage>() .AddActivity <SendAzureServiceBusTopicMessage>() .AddActivity <AzureServiceBusTopicMessageReceived>() ; return(options); }
private static ElsaOptionsBuilder AddWorkflowsCore(this ElsaOptionsBuilder options) { var services = options.Services; services .TryAddSingleton <IClock>(SystemClock.Instance); services .AddLogging() .AddLocalization() .AddSingleton <IIdGenerator, IdGenerator>() .AddScoped <IWorkflowRegistry, WorkflowRegistry>() .AddSingleton <IActivityActivator, ActivityActivator>() .AddSingleton <ITokenService, TokenService>() .AddScoped <IWorkflowRunner, WorkflowRunner>() .AddScoped <WorkflowStarter>() .AddScoped <WorkflowResumer>() .AddScoped <IStartsWorkflow>(sp => sp.GetRequiredService <WorkflowStarter>()) .AddScoped <IStartsWorkflows>(sp => sp.GetRequiredService <WorkflowStarter>()) .AddScoped <IFindsAndStartsWorkflows>(sp => sp.GetRequiredService <WorkflowStarter>()) .AddScoped <IBuildsAndStartsWorkflow>(sp => sp.GetRequiredService <WorkflowStarter>()) .AddScoped <IFindsAndResumesWorkflows>(sp => sp.GetRequiredService <WorkflowResumer>()) .AddScoped <IResumesWorkflow>(sp => sp.GetRequiredService <WorkflowResumer>()) .AddScoped <IResumesWorkflows>(sp => sp.GetRequiredService <WorkflowResumer>()) .AddScoped <IBuildsAndResumesWorkflow>(sp => sp.GetRequiredService <WorkflowResumer>()) .AddScoped <IWorkflowLaunchpad, WorkflowLaunchpad>() .AddScoped <IWorkflowInstanceExecutor, WorkflowInstanceExecutor>() .AddScoped <IWorkflowTriggerInterruptor, WorkflowTriggerInterruptor>() .AddScoped <IWorkflowReviver, WorkflowReviver>() .AddSingleton <IWorkflowFactory, WorkflowFactory>() .AddTransient <IWorkflowBlueprintMaterializer, WorkflowBlueprintMaterializer>() .AddSingleton <IWorkflowBlueprintReflector, WorkflowBlueprintReflector>() .AddSingleton <IBackgroundWorker, BackgroundWorker>() .AddScoped <IWorkflowPublisher, WorkflowPublisher>() .AddScoped <IWorkflowContextManager, WorkflowContextManager>() .AddTransient <IActivityTypeService, ActivityTypeService>() .AddActivityTypeProvider <TypeBasedActivityProvider>() .AddScoped <IWorkflowExecutionLog, WorkflowExecutionLog>() .AddTransient <ICreatesWorkflowExecutionContextForWorkflowBlueprint, WorkflowExecutionContextForWorkflowBlueprintFactory>() .AddTransient <ICreatesActivityExecutionContextForActivityBlueprint, ActivityExecutionContextForActivityBlueprintFactory>() .AddTransient <IGetsStartActivities, GetsStartActivitiesProvider>() ; // Serialization. services .AddTransient <Func <JsonSerializer> >(sp => sp.GetRequiredService <JsonSerializer>) .AddTransient(sp => sp.GetRequiredService <ElsaOptions>().CreateJsonSerializer(sp)) .AddSingleton <IContentSerializer, DefaultContentSerializer>() .AddSingleton <TypeJsonConverter>(); // Expressions. services .TryAddProvider <IExpressionHandler, LiteralHandler>(ServiceLifetime.Singleton) .TryAddProvider <IExpressionHandler, VariableHandler>(ServiceLifetime.Singleton) .TryAddProvider <IExpressionHandler, JsonHandler>(ServiceLifetime.Singleton) .TryAddProvider <IExpressionHandler, SwitchHandler>(ServiceLifetime.Singleton) .AddScoped <IExpressionEvaluator, ExpressionEvaluator>(); // Workflow providers. services .AddWorkflowProvider <ProgrammaticWorkflowProvider>() .AddWorkflowProvider <StorageWorkflowProvider>() .AddWorkflowProvider <DatabaseWorkflowProvider>(); // Metadata. services .AddSingleton <IDescribesActivityType, TypedActivityTypeDescriber>() .AddSingleton <IActivityPropertyOptionsResolver, ActivityPropertyOptionsResolver>() .AddSingleton <IActivityPropertyDefaultValueResolver, ActivityPropertyDefaultValueResolver>() .AddSingleton <IActivityPropertyUIHintResolver, ActivityPropertyUIHintResolver>(); // Bookmarks. services .AddSingleton <IBookmarkHasher, BookmarkHasher>() .AddScoped <IBookmarkIndexer, BookmarkIndexer>() .AddScoped <IBookmarkFinder, BookmarkFinder>() .AddScoped <ITriggerIndexer, TriggerIndexer>() .AddScoped <IGetsTriggersForWorkflowBlueprints, TriggersForBlueprintsProvider>() .AddTransient <IGetsTriggersForActivityBlueprintAndWorkflow, TriggersForActivityBlueprintAndWorkflowProvider>() .AddSingleton <ITriggerStore, TriggerStore>() .AddScoped <ITriggerFinder, TriggerFinder>() .AddBookmarkProvider <SignalReceivedBookmarkProvider>() .AddBookmarkProvider <RunWorkflowBookmarkProvider>(); // Mediator. services .AddMediatR(mediatr => mediatr.AsScoped(), typeof(IActivity), typeof(LogWorkflowExecution)); // Service Bus. services .AddSingleton <ServiceBusFactory>() .AddSingleton <IServiceBusFactory, ServiceBusFactory>() .AddSingleton <ICommandSender, CommandSender>() .AddSingleton <IEventPublisher, EventPublisher>(); options .AddConsumer <TriggerWorkflowsRequestConsumer, TriggerWorkflowsRequest>() .AddConsumer <ExecuteWorkflowDefinitionRequestConsumer, ExecuteWorkflowDefinitionRequest>() .AddConsumer <ExecuteWorkflowInstanceRequestConsumer, ExecuteWorkflowInstanceRequest>() .AddConsumer <UpdateWorkflowTriggersIndexConsumer, WorkflowDefinitionPublished>() .AddConsumer <UpdateWorkflowTriggersIndexConsumer, WorkflowDefinitionRetracted>(); // AutoMapper. services .AddAutoMapperProfile <NodaTimeProfile>() .AddAutoMapperProfile <CloningProfile>() .AddAutoMapperProfile <ExceptionProfile>() .AddTransient <ExceptionConverter>() .AddSingleton <ICloner, AutoMapperCloner>(); // Caching. services .AddMemoryCache() .AddScoped <ISignaler, Signaler>() .Decorate <IWorkflowRegistry, CachingWorkflowRegistry>(); // Builder API. services .AddTransient <IWorkflowBuilder, WorkflowBuilder>() .AddTransient <ICompositeActivityBuilder, CompositeActivityBuilder>() .AddTransient <Func <IWorkflowBuilder> >(sp => sp.GetRequiredService <IWorkflowBuilder>); return(options); }