Beispiel #1
0
        public static IServiceCollection AddElsaCore(
            this IServiceCollection services,
            Action <ElsaOptionsBuilder>?configure = default)
        {
            var optionsBuilder = new ElsaOptionsBuilder(services);

            configure?.Invoke(optionsBuilder);
            optionsBuilder.AddAutoMapper();

            var options = optionsBuilder.ElsaOptions;

            services
            .AddSingleton(options)
            .AddScoped(options.WorkflowDefinitionStoreFactory)
            .AddScoped(options.WorkflowInstanceStoreFactory)
            .AddScoped(options.WorkflowExecutionLogStoreFactory)
            .AddScoped(options.BookmarkStoreFactory)
            .AddScoped(options.TriggerStoreFactory)
            .AddSingleton(options.DistributedLockingOptions.DistributedLockProviderFactory)
            .AddScoped(options.WorkflowDefinitionDispatcherFactory)
            .AddScoped(options.WorkflowInstanceDispatcherFactory)
            .AddScoped(options.CorrelatingWorkflowDispatcherFactory)
            .AddScoped <ILoopDetectorProvider, LoopDetectorProvider>()
            .AddScoped <ILoopHandlerProvider, LoopHandlerProvider>()
            .AddScoped <ActivityExecutionCountLoopDetector>()
            .AddScoped <CooldownLoopHandler>()
            .AddSingleton <IDistributedLockProvider, DistributedLockProvider>()
            .AddStartupTask <ContinueRunningWorkflows>()
            .AddStartupTask <CreateSubscriptions>()
            .AddStartupTask <IndexTriggers>();

            optionsBuilder
            .AddWorkflowsCore()
            .AddConfiguration()
            .AddCoreActivities();

            services
            .Decorate <IWorkflowDefinitionStore, InitializingWorkflowDefinitionStore>()
            .Decorate <IWorkflowDefinitionStore, EventPublishingWorkflowDefinitionStore>()
            .Decorate <IWorkflowInstanceStore, EventPublishingWorkflowInstanceStore>()
            .Decorate <IWorkflowInstanceExecutor, LockingWorkflowInstanceExecutor>()
            .Decorate <IWorkflowInstanceCanceller, LockingWorkflowInstanceCanceller>()
            .Decorate <IWorkflowInstanceDeleter, LockingWorkflowInstanceDeleter>();

            //TenantId default source
            services.TryAddScoped <ITenantAccessor, DefaultTenantAccessor>();

            return(services);
        }
        public static IServiceCollection AddElsaCore(
            this IServiceCollection services,
            Action <ElsaOptionsBuilder>?configure = default)
        {
            var optionsBuilder = new ElsaOptionsBuilder(services);

            configure?.Invoke(optionsBuilder);
            optionsBuilder.AddAutoMapper();

            var options = optionsBuilder.ElsaOptions;

            services
            .AddSingleton(options)
            .AddScoped(options.WorkflowDefinitionStoreFactory)
            .AddScoped(options.WorkflowInstanceStoreFactory)
            .AddScoped(options.WorkflowExecutionLogStoreFactory)
            .AddScoped(options.WorkflowTriggerStoreFactory)
            .AddSingleton(options.DistributedLockingOptions.DistributedLockProviderFactory)
            .AddSingleton(options.SignalFactory)
            .AddSingleton(options.StorageFactory)
            .AddSingleton(options.WorkflowDefinitionDispatcherFactory)
            .AddSingleton(options.WorkflowInstanceDispatcherFactory)
            .AddSingleton(options.CorrelatingWorkflowDispatcherFactory)
            .AddSingleton <IDistributedLockProvider, DistributedLockProvider>()
            .AddStartupTask <ContinueRunningWorkflows>()
            .AddStartupTask <CreateSubscriptions>()
            .AddStartupTask <IndexTriggers>();

            optionsBuilder
            .AddWorkflowsCore()
            .AddCoreActivities();

            services.Decorate <IWorkflowDefinitionStore, InitializingWorkflowDefinitionStore>();
            services.Decorate <IWorkflowDefinitionStore, EventPublishingWorkflowDefinitionStore>();
            services.Decorate <IWorkflowInstanceStore, EventPublishingWorkflowInstanceStore>();
            services.Decorate <IWorkflowRunner, LockingWorkflowRunner>();

            return(services);
        }