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); }