diff --git a/src/activities/Elsa.Activities.Temporal.Common/Extensions/CommonTemporalActivityServices.cs b/src/activities/Elsa.Activities.Temporal.Common/Extensions/CommonTemporalActivityServices.cs
new file mode 100644
index 000000000..2af18e050
--- /dev/null
+++ b/src/activities/Elsa.Activities.Temporal.Common/Extensions/CommonTemporalActivityServices.cs
@@ -0,0 +1,46 @@
+using System;
+using Elsa.Activities.Temporal.Bookmarks;
+using Elsa.Activities.Temporal.Handlers;
+using Elsa.Activities.Temporal.Options;
+using Elsa.Activities.Temporal.StartupTasks;
+using Elsa.Runtime;
+using Microsoft.Extensions.DependencyInjection;
+
+// ReSharper disable once CheckNamespace
+namespace Elsa.Activities.Temporal
+{
+ public static class CommonTemporalActivityServices
+ {
+ ///
+ /// Adds services which are common to temporal activities. This method is intended for internal use only.
+ ///
+ ///
+ ///
+ /// Instead of calling this method directly, when setting up Elsa for temporal (time-based) activities,
+ /// developers should make use of one of the implementation-specific add-temporal-activities methods.
+ /// Without providing an implementation-specific configuration in , this method
+ /// will not fully set up the temporal activities.
+ ///
+ ///
+ /// Elsa options
+ /// The configuration for temporal activity options
+ public static void AddCommonTemporalActivities(ElsaOptions options, Action? configure = default)
+ {
+ var timersOptions = new TimersOptions(options.Services);
+ configure?.Invoke(timersOptions);
+
+ options.Services
+ .AddNotificationHandlers(typeof(RemoveScheduledTriggers))
+ .AddStartupTask()
+ .AddBookmarkProvider()
+ .AddBookmarkProvider()
+ .AddBookmarkProvider();
+
+ options
+ .AddActivity()
+ .AddActivity()
+ .AddActivity()
+ .AddActivity();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/activities/Elsa.Activities.Temporal.Common/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.Temporal.Common/Extensions/ServiceCollectionExtensions.cs
deleted file mode 100644
index 158006935..000000000
--- a/src/activities/Elsa.Activities.Temporal.Common/Extensions/ServiceCollectionExtensions.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using Elsa;
-using Elsa.Activities.Temporal;
-using Elsa.Activities.Temporal.Bookmarks;
-using Elsa.Activities.Temporal.Handlers;
-using Elsa.Activities.Temporal.Options;
-using Elsa.Activities.Temporal.StartupTasks;
-using Elsa.Runtime;
-
-// ReSharper disable once CheckNamespace
-namespace Microsoft.Extensions.DependencyInjection
-{
- public static class ServiceCollectionExtensions
- {
- public static ElsaOptions AddTimerActivities(this ElsaOptions options, Action? configure = default)
- {
- var timersOptions = new TimersOptions(options.Services);
- configure?.Invoke(timersOptions);
-
- options.Services
- .AddNotificationHandlers(typeof(RemoveScheduledTriggers))
- .AddStartupTask()
- .AddBookmarkProvider()
- .AddBookmarkProvider()
- .AddBookmarkProvider();
-
- return options
- .AddActivity()
- .AddActivity()
- .AddActivity()
- .AddActivity();
- }
- }
-}
\ No newline at end of file
diff --git a/src/activities/Elsa.Activities.Temporal.Hangfire/Extensions/ElsaOptionsExtensions.cs b/src/activities/Elsa.Activities.Temporal.Hangfire/Extensions/ElsaOptionsExtensions.cs
index e0ac03f2a..2268edb59 100644
--- a/src/activities/Elsa.Activities.Temporal.Hangfire/Extensions/ElsaOptionsExtensions.cs
+++ b/src/activities/Elsa.Activities.Temporal.Hangfire/Extensions/ElsaOptionsExtensions.cs
@@ -1,12 +1,23 @@
using System;
using Hangfire;
-using Microsoft.Extensions.DependencyInjection;
+using Elsa.Activities.Temporal;
// ReSharper disable once CheckNamespace
namespace Elsa
{
public static class ElsaOptionsExtensions
{
- public static ElsaOptions AddHangfireTimerActivities(this ElsaOptions options, Action configure) => options.AddTimerActivities(timer => timer.UseHangfire(configure));
+ ///
+ /// Adds temporal (time-based) activities to Elsa, using the Hangfire implementation.
+ ///
+ /// Elsa options
+ /// A Hangfire configuration callback
+ /// The Elsa options, enabling method chaining
+ public static ElsaOptions AddHangfireTemporalActivities(this ElsaOptions options,
+ Action configure)
+ {
+ CommonTemporalActivityServices.AddCommonTemporalActivities(options, timer => timer.UseHangfire(configure));
+ return options;
+ }
}
}
\ No newline at end of file
diff --git a/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs b/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs
index dc55f48bb..af40d25d3 100644
--- a/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs
+++ b/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs
@@ -1,5 +1,5 @@
using System;
-using Microsoft.Extensions.DependencyInjection;
+using Elsa.Activities.Temporal;
using Quartz;
// ReSharper disable once CheckNamespace
@@ -7,7 +7,19 @@ namespace Elsa
{
public static class ElsaOptionsExtensions
{
- public static ElsaOptions AddQuartzTimerActivities(this ElsaOptions options, Action? configureOptions = default, Action? configureQuartz = default) =>
- options.AddTimerActivities(timer => timer.UseQuartzProvider(configureOptions, configureQuartz));
+ ///
+ /// Adds temporal (time-based) activities to Elsa, using the Quartz implementation.
+ ///
+ /// Elsa options
+ /// An optional Quartz configuration callback
+ /// An optional service collection Quartz configuration callback
+ /// The Elsa options, enabling method chaining
+ public static ElsaOptions AddQuartzTemporalActivities(this ElsaOptions options,
+ Action? configure = default,
+ Action? configureQuartz = default)
+ {
+ CommonTemporalActivityServices.AddCommonTemporalActivities(options, timer => timer.UseQuartzProvider(configure, configureQuartz));
+ return options;
+ }
}
}
\ No newline at end of file
diff --git a/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Startup.cs b/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Startup.cs
index ecab4d329..52d6e8aec 100644
--- a/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Startup.cs
+++ b/src/samples/aspnet/Elsa.Samples.ForkJoinTimerAndSignalHttp/Startup.cs
@@ -15,7 +15,7 @@ namespace Elsa.Samples.ForkJoinTimerAndSignalHttp
services
.AddElsa(options => options
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddWorkflow()
)
.AddHostedService>();
diff --git a/src/samples/aspnet/Elsa.Samples.Interrupts/Startup.cs b/src/samples/aspnet/Elsa.Samples.Interrupts/Startup.cs
index 70981683e..f2d15e3aa 100644
--- a/src/samples/aspnet/Elsa.Samples.Interrupts/Startup.cs
+++ b/src/samples/aspnet/Elsa.Samples.Interrupts/Startup.cs
@@ -16,7 +16,7 @@ namespace Elsa.Samples.Interrupts
.AddElsa(options => options
.AddConsoleActivities()
.AddHttpActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddActivity())
.StartWorkflow();
}
diff --git a/src/samples/dashboard/ElsaDashboard.Samples.Monolith/Startup.cs b/src/samples/dashboard/ElsaDashboard.Samples.Monolith/Startup.cs
index f6f647a77..234179ad7 100644
--- a/src/samples/dashboard/ElsaDashboard.Samples.Monolith/Startup.cs
+++ b/src/samples/dashboard/ElsaDashboard.Samples.Monolith/Startup.cs
@@ -34,7 +34,7 @@ namespace ElsaDashboard.Samples.Monolith
.AddConsoleActivities()
.AddHttpActivities(elsaSection.GetSection("Http").Bind)
.AddEmailActivities(elsaSection.GetSection("Smtp").Bind)
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddWorkflowsFrom()
);
diff --git a/src/samples/server/Elsa.Samples.Server.Host/Startup.cs b/src/samples/server/Elsa.Samples.Server.Host/Startup.cs
index 2b45406a9..fb2aed01d 100644
--- a/src/samples/server/Elsa.Samples.Server.Host/Startup.cs
+++ b/src/samples/server/Elsa.Samples.Server.Host/Startup.cs
@@ -29,7 +29,7 @@ namespace Elsa.Samples.Server.Host
.AddConsoleActivities()
.AddHttpActivities(elsaSection.GetSection("Http").Bind)
.AddEmailActivities(elsaSection.GetSection("Smtp").Bind)
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddWorkflowsFrom()
);
diff --git a/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Program.cs b/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Program.cs
index c4323fc68..e2e702e51 100644
--- a/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Program.cs
+++ b/src/samples/worker/Elsa.Samples.AzureServiceBusWorker/Program.cs
@@ -25,7 +25,7 @@ namespace Elsa.Samples.AzureServiceBusWorker
//.UseYesSqlPersistence(yesSql => yesSql.UseSqLite("Data Source=elsa.yessql.db;Cache=Shared", IsolationLevel.ReadUncommitted))
.UseEntityFrameworkPersistence(db => db.UseSqlite("Data Source=elsa.efcore.db;Cache=Shared", sqlite => sqlite.MigrationsAssembly(typeof(SqliteElsaContextFactory).Assembly.GetName().Name)), true)
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddAzureServiceBusActivities(o => o.ConnectionString = hostContext.Configuration.GetConnectionString("AzureServiceBus"))
.AddWorkflow()
.AddWorkflow());
diff --git a/src/samples/worker/Elsa.Samples.BreakLoop/Program.cs b/src/samples/worker/Elsa.Samples.BreakLoop/Program.cs
index 332cca681..b37ae9315 100644
--- a/src/samples/worker/Elsa.Samples.BreakLoop/Program.cs
+++ b/src/samples/worker/Elsa.Samples.BreakLoop/Program.cs
@@ -17,7 +17,7 @@ namespace Elsa.Samples.BreakLoop
services
.AddElsa(options => options.UseYesSqlPersistence()
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddActivitiesFrom()
.AddWorkflowsFrom());
diff --git a/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Program.cs b/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Program.cs
index 4b0280a83..35ea27a2d 100644
--- a/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Program.cs
+++ b/src/samples/worker/Elsa.Samples.CustomAttributesChildWorker/Program.cs
@@ -19,7 +19,7 @@ namespace Elsa.Samples.CustomAttributesChildWorker
{
services
.AddElsa(options => options
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddConsoleActivities()
.AddRebusActivities()
.AddWorkflow()
diff --git a/src/samples/worker/Elsa.Samples.DistributedLock/Program.cs b/src/samples/worker/Elsa.Samples.DistributedLock/Program.cs
index 83f7ca5c9..1e1552bc5 100644
--- a/src/samples/worker/Elsa.Samples.DistributedLock/Program.cs
+++ b/src/samples/worker/Elsa.Samples.DistributedLock/Program.cs
@@ -20,7 +20,7 @@ namespace Elsa.Samples.DistributedLock
services
.AddElsa(options => options.UseRedisLockProvider("localhost:6379,abortConnect=false")
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddWorkflow());
});
}
diff --git a/src/samples/worker/Elsa.Samples.Faulting/Program.cs b/src/samples/worker/Elsa.Samples.Faulting/Program.cs
index 9f919acdb..ef2fc2b33 100644
--- a/src/samples/worker/Elsa.Samples.Faulting/Program.cs
+++ b/src/samples/worker/Elsa.Samples.Faulting/Program.cs
@@ -20,7 +20,7 @@ namespace Elsa.Samples.Faulting
.AddElsa(options => options
.UseYesSqlPersistence()
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddWorkflow());
});
}
diff --git a/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Program.cs b/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Program.cs
index 7bf660f2a..4ca8242c7 100644
--- a/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Program.cs
+++ b/src/samples/worker/Elsa.Samples.MultiTenantChildWorker/Program.cs
@@ -19,7 +19,7 @@ namespace Elsa.Samples.MultiTenantChildWorker
{
services
.AddElsa(options => options
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddConsoleActivities()
.AddRebusActivities()
.AddWorkflow()
diff --git a/src/samples/worker/Elsa.Samples.RebusWorker/Program.cs b/src/samples/worker/Elsa.Samples.RebusWorker/Program.cs
index 7415e5a05..39f936737 100644
--- a/src/samples/worker/Elsa.Samples.RebusWorker/Program.cs
+++ b/src/samples/worker/Elsa.Samples.RebusWorker/Program.cs
@@ -26,7 +26,7 @@ namespace Elsa.Samples.RebusWorker
db => db.MigrationsAssembly(typeof(SqliteElsaContextFactory).Assembly.GetName().Name));
}, true)
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddRebusActivities()
.AddWorkflow()
.AddWorkflow());
diff --git a/src/samples/worker/Elsa.Samples.Timers.Hangfire/Program.cs b/src/samples/worker/Elsa.Samples.Timers.Hangfire/Program.cs
index ff7e88dd2..a591618cc 100644
--- a/src/samples/worker/Elsa.Samples.Timers.Hangfire/Program.cs
+++ b/src/samples/worker/Elsa.Samples.Timers.Hangfire/Program.cs
@@ -18,7 +18,7 @@ namespace Elsa.Samples.Timers
services
.AddElsa(options => options
.AddConsoleActivities()
- .AddHangfireTimerActivities(hangfire => hangfire.UseSqlServerStorage("Server=(localdb)\\MSSQLLocalDB;Database=ElsaHangfire;Trusted_Connection=True;MultipleActiveResultSets=true"))
+ .AddHangfireTemporalActivities(hangfire => hangfire.UseSqlServerStorage("Server=(localdb)\\MSSQLLocalDB;Database=ElsaHangfire;Trusted_Connection=True;MultipleActiveResultSets=true"))
.AddWorkflow()
.AddWorkflow()
.AddWorkflow()
diff --git a/src/samples/worker/Elsa.Samples.Timers.Quartz/Program.cs b/src/samples/worker/Elsa.Samples.Timers.Quartz/Program.cs
index 4964c25e8..85d380490 100644
--- a/src/samples/worker/Elsa.Samples.Timers.Quartz/Program.cs
+++ b/src/samples/worker/Elsa.Samples.Timers.Quartz/Program.cs
@@ -21,7 +21,7 @@ namespace Elsa.Samples.Timers
.AddElsa(options => options
.UseEntityFrameworkPersistence(ef => ef.UseSqlite())
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddActivity()
.AddActivity()
//.AddWorkflow()
diff --git a/src/samples/worker/Elsa.Samples.WhileLoopWorker/Program.cs b/src/samples/worker/Elsa.Samples.WhileLoopWorker/Program.cs
index b29452968..ca6ed43ec 100644
--- a/src/samples/worker/Elsa.Samples.WhileLoopWorker/Program.cs
+++ b/src/samples/worker/Elsa.Samples.WhileLoopWorker/Program.cs
@@ -19,7 +19,7 @@ namespace Elsa.Samples.WhileLoopWorker
services
.AddElsa(options => options.UseYesSqlPersistence()
.AddConsoleActivities()
- .AddQuartzTimerActivities()
+ .AddQuartzTemporalActivities()
.AddActivity()
.AddWorkflow())
.AddSingleton()
diff --git a/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs b/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs
index 5c301fe16..ddf5eabf2 100644
--- a/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs
+++ b/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs
@@ -5,17 +5,18 @@ using Xunit;
using Hangfire;
using System.Threading.Tasks;
using System.Threading;
+using Elsa.Activities.Temporal;
namespace Elsa.UnitTests.Extensions
{
public class TemporalServiceCollectionExtensionsTests
{
- [Fact(DisplayName = "Starting a hosted app which uses only AddTimerActivities should throw InvalidOperationException because of the missing impl")]
- public void AddTimerActivitiesThrowsDuringStartupIfNoTemporalImplementationPresent()
+ [Fact(DisplayName = "Starting a hosted app which uses only AddCommonTemporalActivities should throw InvalidOperationException because of the missing impl")]
+ public void AddCommonTemporalActivitiesThrowsDuringStartupIfNoTemporalImplementationPresent()
{
var hostBuilder = CreateHostBuilderUsingServices(services => {
services.AddElsa(elsa => {
- elsa.AddTimerActivities();
+ CommonTemporalActivityServices.AddCommonTemporalActivities(elsa);
});
});
@@ -32,12 +33,12 @@ namespace Elsa.UnitTests.Extensions
}
}
- [Fact(DisplayName = "Starting a hosted app which uses AddHangfireTimerActivities should not throw")]
- public void AddHangfireTimerActivitiesDoesNotThrowDuringStartup()
+ [Fact(DisplayName = "Starting a hosted app which uses AddHangfireTemporalActivities should not throw")]
+ public void AddHangfireTemporalActivitiesDoesNotThrowDuringStartup()
{
var hostBuilder = CreateHostBuilderUsingServices(services => {
services.AddElsa(elsa => {
- elsa.AddHangfireTimerActivities(config => config.UseInMemoryStorage());
+ elsa.AddHangfireTemporalActivities(config => config.UseInMemoryStorage());
});
});
@@ -56,12 +57,12 @@ namespace Elsa.UnitTests.Extensions
}
}
- [Fact(DisplayName = "Starting a hosted app which uses AddQuartzTimerActivities should not throw")]
- public void AddQuartzTimerActivitiesDoesNotThrowDuringStartup()
+ [Fact(DisplayName = "Starting a hosted app which uses AddQuartzTemporalActivities should not throw")]
+ public void AddQuartzTemporalActivitiesDoesNotThrowDuringStartup()
{
var hostBuilder = CreateHostBuilderUsingServices(services => {
services.AddElsa(elsa => {
- elsa.AddQuartzTimerActivities();
+ elsa.AddQuartzTemporalActivities();
});
});