public static ElsaBuilder AddWorkflowDefinitionStore(this ElsaBuilder configuration) { configuration.Services .AddScoped <IWorkflowDefinitionStore, NetModularWorkflowDefinitionStore>(); return(configuration); }
public static YesSqlElsaBuilder AddYesSqlStores( this ElsaBuilder configuration, Action <IConfiguration> configure) { return(configuration.AddYesSqlProvider(configure).AddWorkflowDefinitionStore() .AddWorkflowInstanceStore()); }
public static ElsaBuilder AddNetModularStores( this ElsaBuilder configuration) { return(configuration .AddWorkflowDefinitionStore() .AddWorkflowInstanceStore()); }
private static ElsaBuilder AddWorkflowsCore(this ElsaBuilder configuration) { var services = configuration.Services; services.TryAddSingleton <IClock>(SystemClock.Instance); services .AddLogging() .AddLocalization() .AddTransient <Func <IEnumerable <IActivity> > >(sp => sp.GetServices <IActivity>) .AddSingleton <IIdGenerator, IdGenerator>() .AddSingleton <IWorkflowSerializer, WorkflowSerializer>() .TryAddProvider <ITokenFormatter, JsonTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <ITokenFormatter, YamlTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <ITokenFormatter, XmlTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <IExpressionEvaluator, LiteralEvaluator>(ServiceLifetime.Singleton) .AddTransient <IWorkflowFactory, WorkflowFactory>() .AddScoped <IActivityInvoker, ActivityInvoker>() .AddScoped <IWorkflowExpressionEvaluator, WorkflowExpressionEvaluator>() .AddSingleton <IWorkflowSerializerProvider, WorkflowSerializerProvider>() .AddTransient <IWorkflowRegistry, WorkflowRegistry>() .AddScoped <IWorkflowEventHandler, PersistenceWorkflowEventHandler>() .AddScoped <IWorkflowInvoker, WorkflowInvoker>() .AddScoped <IActivityResolver, ActivityResolver>() .AddScoped <IWorkflowEventHandler, ActivityLoggingWorkflowEventHandler>() .AddTransient <IWorkflowProvider, StoreWorkflowProvider>() .AddTransient <IWorkflowProvider, CodeWorkflowProvider>() .AddTransient <IWorkflowBuilder, WorkflowBuilder>() .AddTransient <Func <IWorkflowBuilder> >(sp => sp.GetRequiredService <IWorkflowBuilder>) .AddAutoMapperProfile <WorkflowDefinitionProfile>(ServiceLifetime.Singleton) .AddPrimitiveActivities(); return(configuration); }
public static EntityFrameworkCoreElsaBuilder AddEntityFrameworkCoreProvider <TElsaContext>( this ElsaBuilder configuration, Action <DbContextOptionsBuilder> configureOptions, bool usePooling = true, bool autoRunMigrations = false) where TElsaContext : ElsaContext { var services = configuration.Services; if (usePooling) { services.AddDbContextPool <ElsaContext, TElsaContext>(configureOptions); } else { services.AddDbContext <ElsaContext, TElsaContext>(configureOptions); } services .AddMapperProfile <NodaTimeProfile>(ServiceLifetime.Singleton) .AddMapperProfile <EntitiesProfile>(ServiceLifetime.Singleton); if (autoRunMigrations) { services.AddHostedService <RunMigrations>(); } return(new EntityFrameworkCoreElsaBuilder(configuration.Services)); }
private static ElsaBuilder WithElsaDashboard(this ElsaBuilder builder) { var services = builder.Services; services .AddSingleton <IIdGenerator, IdGenerator>() .AddSingleton <IWorkflowSerializerProvider, WorkflowSerializerProvider>() .AddSingleton <IWorkflowSerializer, WorkflowSerializer>() .TryAddProvider <ITokenFormatter, JsonTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <ITokenFormatter, YamlTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <ITokenFormatter, XmlTokenFormatter>(ServiceLifetime.Singleton) .AddHttpContextAccessor() .AddScoped <IWorkflowPublisher, WorkflowPublisher>() .AddScoped <INotifier, Notifier>() .AddScoped <NotifierFilter>() .AddAutoMapperProfile <WorkflowDefinitionProfile>(ServiceLifetime.Singleton); services.AddScoped( sp => { var accessor = sp.GetRequiredService <IHttpContextAccessor>(); var factory = sp.GetRequiredService <ITempDataDictionaryFactory>(); return(factory.GetTempData(accessor.HttpContext)); } ); services.AddMvcCore( mvc => { mvc.Filters.AddService <NotifierFilter>(); } ); return(builder); }
public static CosmosDbElsaBuilder AddCosmosDbProvider( this ElsaBuilder builder, string url, string authSecret, string database, string collection, DocumentDbStorageOptions options = null) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException(nameof(url)); } if (string.IsNullOrEmpty(authSecret)) { throw new ArgumentNullException(nameof(authSecret)); } var storage = new DocumentDbStorage(url, authSecret, database, collection, options); builder.Services .AddSingleton(storage) .AddMapperProfile <NodaTimeProfile>(ServiceLifetime.Singleton) .AddMapperProfile <DocumentProfile>(ServiceLifetime.Singleton); return(new CosmosDbElsaBuilder(builder.Services)); }
public static IServiceCollection AddElsaDashboard( this IServiceCollection services, Action <OptionsBuilder <ElsaDashboardOptions> > options = default, Action <ElsaBuilder> configure = default ) { var configuration = new ElsaBuilder(services); services.AddControllersWithViews(); configuration.WithElsaDashboard(); configure?.Invoke(configuration); var optionsBuilder = services.AddOptions <ElsaDashboardOptions>(); options?.Invoke(optionsBuilder); if (options == null) { optionsBuilder.Configure(x => x.DiscoverActivities()); } services .AddTaskExecutingServer() .AddTempData(); services.AddMvcCore( mvc => { mvc.Filters.AddService <NotifierFilter>(); } ); return(services); }
public static IServiceCollection AddElsaWorkFlow(this IServiceCollection services, Action <ElsaBuilder> configure = null) { var configuration = new ElsaBuilder(services); services .AddTransient <Func <IEnumerable <IActivity> > >(sp => sp.GetServices <IActivity>) .AddSingleton <IIdGenerator, ElsaIdGenerator>() .AddSingleton <IWorkflowSerializer, WorkflowSerializer>() .TryAddProvider <ITokenFormatter, JsonTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <ITokenFormatter, YamlTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <ITokenFormatter, XmlTokenFormatter>(ServiceLifetime.Singleton) .TryAddProvider <IExpressionEvaluator, LiteralEvaluator>(ServiceLifetime.Singleton) .AddTransient <IWorkflowFactory, WorkflowFactory>() .AddScoped <IWorkflowExpressionEvaluator, WorkflowExpressionEvaluator>() .AddSingleton <IWorkflowSerializerProvider, WorkflowSerializerProvider>() .AddTransient <IWorkflowRegistry, WorkFlowManager>() .AddScoped <IWorkflowEventHandler, PersistenceWorkflowEventHandler>() .AddScoped <IWorkflowInvoker, WorkFlowInvoker>() .AddScoped <IActivityResolver, ActivityResolver>() .AddScoped <IWorkflowEventHandler, ActivityLoggingWorkflowEventHandler>() .AddTransient <IWorkflowProvider, StoreWorkflowProvider>() .AddTransient <IWorkflowProvider, CodeWorkflowProvider>() .AddTransient <IWorkflowBuilder, WorkflowBuilder>() .AddTransient <Func <IWorkflowBuilder> >(sp => sp.GetRequiredService <IWorkflowBuilder>) .AddMapperProfile <WorkflowDefinitionProfile>(ServiceLifetime.Singleton) .AddActivity <SetVariable>(); services.AddMediatR( mediatr => mediatr.AsSingleton(), typeof(ElsaServiceCollectionExtensions)); configure?.Invoke(configuration); EnsurePersistence(configuration); EnsureCaching(configuration); return(services); }
public static ElsaBuilder AddWorkflowInstanceStore(this ElsaBuilder configuration) { configuration.Services .AddScoped <IWorkflowInstanceStore, NetModularWorkflowInstanceStrore>() .AddMapperProfile <NodaTimeProfile>(ServiceLifetime.Singleton) .AddMapperProfile <EntitiesProfile>(ServiceLifetime.Singleton); return(configuration); }
private static void EnsureCaching(ElsaBuilder configuration) { if (!configuration.HasService <ISignal>()) { configuration.Services.AddSingleton <ISignal, Signal>(); } configuration.Services.AddMemoryCache(); }
public static EntityFrameworkCoreElsaBuilder AddEntityFrameworkStores( this ElsaBuilder configuration, Action <DbContextOptionsBuilder> configureOptions, bool usePooling = true) { return(configuration .AddEntityFrameworkCoreProvider(configureOptions, usePooling) .AddWorkflowDefinitionStore() .AddWorkflowInstanceStore()); }
public static MongoElsaBuilder AddMongoDbStores( this ElsaBuilder elsaBuilder, IConfiguration configuration, string databaseName, string connectionStringName) { return(elsaBuilder .AddMongoDbProvider(configuration, databaseName, connectionStringName) .AddMongoDbWorkflowDefinitionStore() .AddMongoDbWorkflowInstanceStore()); }
private static void EnsurePersistence(ElsaBuilder configuration) { var hasDefinitionStore = configuration.HasService <IWorkflowDefinitionStore>(); var hasInstanceStore = configuration.HasService <IWorkflowInstanceStore>(); if (!hasDefinitionStore || !hasInstanceStore) { configuration.WithMemoryStores(); } configuration.Services.Decorate <IWorkflowDefinitionStore, PublishingWorkflowDefinitionStore>(); }
public static IServiceCollection AddElsaCore( this IServiceCollection services, Action <ElsaBuilder> configure = null) { var configuration = new ElsaBuilder(services); configuration.AddWorkflowsCore(); configuration.AddMediatR(); configure?.Invoke(configuration); EnsurePersistence(configuration); EnsureCaching(configuration); return(services); }
public static YesSqlElsaBuilder AddYesSqlProvider( this ElsaBuilder configuration, Action <IConfiguration> configure) { configuration.Services .AddSingleton(sp => StoreFactory.CreateStore(sp, configure)) .AddSingleton <IIndexProvider, WorkflowDefinitionIndexProvider>() .AddSingleton <IIndexProvider, WorkflowInstanceIndexProvider>() .AddScoped(CreateSession) .AddAutoMapperProfile <InstantProfile>(ServiceLifetime.Singleton) .AddAutoMapperProfile <DocumentProfile>(ServiceLifetime.Singleton) .AddStartupTask <InitializeStoreTask>(); return(new YesSqlElsaBuilder(configuration.Services)); }
public static EntityFrameworkCoreElsaBuilder AddCustomSchema(this ElsaBuilder configuration, string schema, string migrationHistoryTableName = null) { EntityFrameworkCoreElsaBuilder frameworkCoreElsaBuilder = new EntityFrameworkCoreElsaBuilder(configuration.Services); if (string.IsNullOrWhiteSpace(schema)) { return(frameworkCoreElsaBuilder); } DbContextCustomSchema dbContextCustomSchema = new DbContextCustomSchema(schema, !string.IsNullOrWhiteSpace(migrationHistoryTableName) ? migrationHistoryTableName : DbContextCustomSchema.DefaultMigrationsHistoryTableName); configuration.Services.AddSingleton <IDbContextCustomSchema>(dbContextCustomSchema); return(frameworkCoreElsaBuilder); }
public static CosmosDbElsaBuilder AddCosmosDbProvider( this ElsaBuilder builder, Action <OptionsBuilder <DocumentDbStorageOptions> > options) { options?.Invoke(builder.Services.AddOptions <DocumentDbStorageOptions>()); builder.Services .AddSingleton <IDocumentDbStorage, DocumentDbStorage>() .AddSingleton <IWorkflowInstanceStore, CosmosDbWorkflowInstanceStore>() .AddSingleton <IWorkflowDefinitionStore, CosmosDbWorkflowDefinitionStore>() .AddMapperProfile <NodaTimeProfile>(ServiceLifetime.Singleton) .AddMapperProfile <DocumentProfile>(ServiceLifetime.Singleton); return(new CosmosDbElsaBuilder(builder.Services)); }
public static CosmosDbElsaBuilder AddCosmosDbProvider <T>(this ElsaBuilder builder, Type cosmosDBStoreHelperType, Action <OptionsBuilder <DocumentDbStorageOptions> > options) where T : class, ITenantProvider { options?.Invoke(builder.Services.AddOptions <DocumentDbStorageOptions>()); builder.Services .AddSingleton <IDocumentDbStorage, DocumentDbStorage>() .AddSingleton <IWorkflowInstanceStore, CosmosDbWorkflowInstanceStore>() .AddSingleton <IWorkflowDefinitionStore, CosmosDbWorkflowDefinitionStore>() .AddMapperProfile <NodaTimeProfile>(ServiceLifetime.Singleton) .AddMapperProfile <DocumentProfile>(ServiceLifetime.Singleton) .AddTransient <ITenantProvider, T>() .AddTransient(typeof(ICosmosDbStoreHelper <>), cosmosDBStoreHelperType); return(new CosmosDbElsaBuilder(builder.Services)); }
public static MongoElsaBuilder AddMongoDbProvider( this ElsaBuilder elsaBuilder, IConfiguration configuration, string databaseName, string connectionStringName ) { NodaTimeSerializers.Register(); RegisterEnumAsStringConvention(); BsonSerializer.RegisterSerializer(new JObjectSerializer()); BsonSerializer.RegisterSerializer(new WorkflowExecutionScopeSerializer()); elsaBuilder.Services .AddSingleton(sp => CreateDbClient(configuration, connectionStringName)) .AddSingleton(sp => CreateDatabase(sp, databaseName)); return(new MongoElsaBuilder(elsaBuilder.Services)); }
public static EntityFrameworkCoreElsaBuilder AddEntityFrameworkCoreProvider( this ElsaBuilder configuration, Action <DbContextOptionsBuilder> configureOptions, bool usePooling = true) { var services = configuration.Services; if (usePooling) { services.AddDbContextPool <ElsaContext>(configureOptions); } else { services.AddDbContext <ElsaContext>(configureOptions); } services .AddAutoMapperProfile <InstantProfile>(ServiceLifetime.Singleton) .AddAutoMapperProfile <DocumentProfile>(ServiceLifetime.Singleton); return(new EntityFrameworkCoreElsaBuilder(configuration.Services)); }
public ElsaContext CreateDbContext(string[] args) { // Migrations added to Sample23.CustomMigration with the following Powershell command // Add-Migration InitialCreate -context ElsaContext -Project Sample23.CustomMigration var services = new ServiceCollection(); ElsaBuilder elsaBuilder = new ElsaBuilder(services); elsaBuilder.AddCustomSchema("elsa"); var optionsBuilder = new DbContextOptionsBuilder <ElsaContext>(); optionsBuilder.UseSqlite( @"Data Source=c:\data\elsa.entity-framework-core.db;Cache=Shared", x => { x.AddCustomSchemaModelSupport(optionsBuilder, elsaBuilder.Services); x.MigrationsAssembly(typeof(Program).Assembly.FullName); x.MigrationsHistoryTableWithSchema(optionsBuilder); }); return(new ElsaContext(optionsBuilder.Options)); }
public static MemoryStoreElsaBuilder WithMemoryStores(this ElsaBuilder configuration) { return(configuration.WithMemoryProvider().WithWorkflowDefinitionStore().WithWorkflowInstanceStore()); }
public static CosmosDbElsaBuilder AddCosmosDbProvider(this ElsaBuilder builder, Action <OptionsBuilder <DocumentDbStorageOptions> > options) { return(builder.AddCosmosDbProvider <TenantProvider>(options)); }
public static CosmosDbElsaBuilder AddCosmosDbProvider <T>(this ElsaBuilder builder, Action <OptionsBuilder <DocumentDbStorageOptions> > options) where T : class, ITenantProvider { return(builder.AddCosmosDbProvider <T>(typeof(CosmosDbStoreHelper <>), options)); }
public static MemoryStoreElsaBuilder WithMemoryProvider(this ElsaBuilder configuration) { return(new MemoryStoreElsaBuilder(configuration.Services)); }
public static bool HasService <T>(this ElsaBuilder configuration) => configuration.Services.HasService <T>();
private static IServiceCollection AddMediatR(this ElsaBuilder configuration) { return(configuration.Services.AddMediatR( mediatr => mediatr.AsSingleton(), typeof(ElsaServiceCollectionExtensions))); }