コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }