diff --git a/Elsa.sln.DotSettings b/Elsa.sln.DotSettings
index 6e5823092..dd47f2b84 100644
--- a/Elsa.sln.DotSettings
+++ b/Elsa.sln.DotSettings
@@ -11,6 +11,7 @@
True
True
True
+ True
True
True
True
diff --git a/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs b/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs
index af40d25d3..a76822a1a 100644
--- a/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs
+++ b/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/ElsaOptionsExtensions.cs
@@ -8,17 +8,20 @@ namespace Elsa
public static class ElsaOptionsExtensions
{
///
- /// Adds temporal (time-based) activities to Elsa, using the Quartz implementation.
+ /// Adds temporal (time-based) activities to Elsa using the Quartz implementation. Also registers Quartz services itself.
///
/// Elsa options
- /// An optional Quartz configuration callback
+ ///
/// An optional service collection Quartz configuration callback
+ /// Use this callback to further configure the Quartz hosted service
/// The Elsa options, enabling method chaining
- public static ElsaOptions AddQuartzTemporalActivities(this ElsaOptions options,
- Action? configure = default,
- Action? configureQuartz = default)
+ public static ElsaOptions AddQuartzTemporalActivities(
+ this ElsaOptions options,
+ Action? configureQuartzOptions = default,
+ Action? configureQuartz = default,
+ Action? configureQuartzHostedService = default)
{
- CommonTemporalActivityServices.AddCommonTemporalActivities(options, timer => timer.UseQuartzProvider(configure, configureQuartz));
+ CommonTemporalActivityServices.AddCommonTemporalActivities(options, timer => timer.UseQuartzProvider(true, configureQuartzOptions, configureQuartz, configureQuartzHostedService));
return options;
}
}
diff --git a/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/TimersOptionsExtensions.cs b/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/TimersOptionsExtensions.cs
index 5332c9989..754261939 100644
--- a/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/TimersOptionsExtensions.cs
+++ b/src/activities/Elsa.Activities.Temporal.Quartz/Extensions/TimersOptionsExtensions.cs
@@ -12,34 +12,34 @@ namespace Elsa
public static class TimersOptionsExtensions
{
///
- /// Add Elsa Quartz services.
+ /// Add Elsa Quartz services and Quartz services.
///
- public static void UseQuartzProvider(this TimersOptions timersOptions)
+ /// The timer options being configured.
+ /// True to automatically register Quartz services. When false, make sure to register Quartz yourself.
+ /// When is true, you can use this callback to further configure Quartz options.
+ /// When is true, you can use this callback to further configure Quartz.
+ /// When is true, you can use this callback to further configure the Quartz hosted service.
+ public static void UseQuartzProvider(
+ this TimersOptions timersOptions,
+ bool registerQuartz = true,
+ Action? configureQuartzOptions = default,
+ Action? configureQuartz = default,
+ Action? configureQuartzHostedService = default)
{
timersOptions.Services
.AddSingleton()
.AddSingleton()
.AddTransient();
- }
- ///
- /// Add Elsa Hangfire Services and Quartz services.
- ///
- ///
- /// Use only if Quartz is not already registered in DI.
- ///
- public static void UseQuartzProvider(
- this TimersOptions timersOptions,
- Action configureOptions,
- Action? configureQuartz = default,
- Action? configureQuartzHostedService = default)
- {
- timersOptions.UseQuartzProvider();
- timersOptions.Services.Configure(configureOptions);
-
- timersOptions.Services
- .AddQuartz(configure => ConfigureQuartz(configure, configureQuartz))
- .AddQuartzHostedService(options => ConfigureQuartzHostedService(options, configureQuartzHostedService));
+ if (registerQuartz)
+ {
+ if (configureQuartzOptions != null)
+ timersOptions.Services.Configure(configureQuartzOptions);
+
+ timersOptions.Services
+ .AddQuartz(configure => ConfigureQuartz(configure, configureQuartz))
+ .AddQuartzHostedService(options => ConfigureQuartzHostedService(options, configureQuartzHostedService));
+ }
}
private static void ConfigureQuartzHostedService(QuartzHostedServiceOptions options, Action? configureQuartzHostedService)
@@ -54,7 +54,7 @@ namespace Elsa
quartz.AddJob(job => job.StoreDurably().WithIdentity(nameof(RunQuartzWorkflowJob)));
quartz.UseSimpleTypeLoader();
quartz.UseInMemoryStore();
-
+
configureQuartz?.Invoke(quartz);
}
}
diff --git a/test/integration/Elsa.Core.IntegrationTests/Autofixture/HostBuilderWithElsaAndQuartzAttribute.cs b/test/integration/Elsa.Core.IntegrationTests/Autofixture/HostBuilderWithElsaAndQuartzAttribute.cs
index 04df15bb0..ae641f89e 100644
--- a/test/integration/Elsa.Core.IntegrationTests/Autofixture/HostBuilderWithElsaAndQuartzAttribute.cs
+++ b/test/integration/Elsa.Core.IntegrationTests/Autofixture/HostBuilderWithElsaAndQuartzAttribute.cs
@@ -4,7 +4,7 @@ using AutoFixture.Xunit2;
using Elsa.Testing.Shared.AutoFixture.Customizations;
using Microsoft.Extensions.DependencyInjection;
-namespace Elsa.Core.IntegrationTests.Extensions
+namespace Elsa.Core.IntegrationTests.Autofixture
{
public class HostBuilderWithElsaAndQuartzAttribute : CustomizeAttribute
{
diff --git a/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs b/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs
index 922298e5a..449e353da 100644
--- a/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs
+++ b/test/integration/Elsa.Core.IntegrationTests/Extensions/TemporalServiceCollectionExtensionsTests.cs
@@ -3,6 +3,7 @@ using Microsoft.Extensions.Hosting;
using Xunit;
using System.Threading.Tasks;
using System.Threading;
+using Elsa.Core.IntegrationTests.Autofixture;
using Elsa.Core.IntegrationTests.Extensions;
namespace Elsa.UnitTests.Extensions
diff --git a/test/unit/Elsa.UnitTests/Services/ActivityExecutionContextForActivityBlueprintFactoryTests.cs b/test/unit/Elsa.UnitTests/Services/ActivityExecutionContextForActivityBlueprintFactoryTests.cs
index 8949c53a0..2064ca30f 100644
--- a/test/unit/Elsa.UnitTests/Services/ActivityExecutionContextForActivityBlueprintFactoryTests.cs
+++ b/test/unit/Elsa.UnitTests/Services/ActivityExecutionContextForActivityBlueprintFactoryTests.cs
@@ -9,10 +9,11 @@ namespace Elsa.Services
public class ActivityExecutionContextForActivityBlueprintFactoryTests
{
[Theory(DisplayName = "The CreateActivityExecutionContext method should create a context using the activity blueprint, the workflow execution context, cancellation token and injected service provider."), AutoMoqData]
- public void CreateActivityExecutionContextCreatesContextUsingBlueprintExecutionContextCancellationTokenAndServiceProvider([AutofixtureServiceProvider] IServiceProvider serviceProvider,
- IActivityBlueprint activityBlueprint,
- [OmitOnRecursion] WorkflowExecutionContext workflowExecutionContext,
- CancellationToken cancellationToken)
+ public void CreateActivityExecutionContextCreatesContextUsingBlueprintExecutionContextCancellationTokenAndServiceProvider(
+ [AutofixtureServiceProvider] IServiceProvider serviceProvider,
+ IActivityBlueprint activityBlueprint,
+ [OmitOnRecursion] WorkflowExecutionContext workflowExecutionContext,
+ CancellationToken cancellationToken)
{
var sut = new ActivityExecutionContextForActivityBlueprintFactory(serviceProvider);
diff --git a/test/unit/Elsa.UnitTests/Services/Models/ActivityExecutionContextTests.cs b/test/unit/Elsa.UnitTests/Services/Models/ActivityExecutionContextTests.cs
index 33f70a1b7..80b43b50f 100644
--- a/test/unit/Elsa.UnitTests/Services/Models/ActivityExecutionContextTests.cs
+++ b/test/unit/Elsa.UnitTests/Services/Models/ActivityExecutionContextTests.cs
@@ -2,6 +2,7 @@ using Xunit;
using Elsa.Testing.Shared.AutoFixture.Attributes;
using AutoFixture.Xunit2;
using System;
+using System.Threading;
namespace Elsa.Services.Models
{
@@ -9,12 +10,15 @@ namespace Elsa.Services.Models
{
[Theory(DisplayName = "The PurgeVariables method should clear the Variables instance associated with the WorkflowInstance associated with the Workflow Execution Context"), AutoMoqData]
public void PurgeVariables_clears_workflow_execution_context_workflow_instance_variables(
- [OmitOnRecursion, NoAutoProperties] ActivityExecutionContext sut,
+ [AutofixtureServiceProvider] IServiceProvider serviceProvider,
+ [OmitOnRecursion] WorkflowExecutionContext workflowExecutionContext,
+ IActivityBlueprint activityBlueprint,
+ CancellationToken cancellationToken,
string variableName,
object variableValue)
{
+ var sut = new ActivityExecutionContext(serviceProvider, workflowExecutionContext, activityBlueprint, null, false, cancellationToken);
sut.WorkflowExecutionContext.WorkflowInstance.Variables.Set(variableName, variableValue);
-
sut.PurgeVariables();
Assert.Empty(sut.WorkflowExecutionContext.WorkflowInstance.Variables.Data);
diff --git a/test/unit/Elsa.UnitTests/Services/Models/WorkflowExecutionContextTests.cs b/test/unit/Elsa.UnitTests/Services/Models/WorkflowExecutionContextTests.cs
index e917f697e..dcc32fe54 100644
--- a/test/unit/Elsa.UnitTests/Services/Models/WorkflowExecutionContextTests.cs
+++ b/test/unit/Elsa.UnitTests/Services/Models/WorkflowExecutionContextTests.cs
@@ -2,6 +2,7 @@ using Xunit;
using Elsa.Testing.Shared.AutoFixture.Attributes;
using AutoFixture.Xunit2;
using System;
+using System.Threading;
namespace Elsa.Services.Models
{
@@ -9,10 +10,14 @@ namespace Elsa.Services.Models
{
[Theory(DisplayName = "The PurgeVariables method should clear the Variables instance associated with the WorkflowInstance"), AutoMoqData]
public void PurgeVariables_clears_workflow_execution_context_workflow_instance_variables(
- [OmitOnRecursion, NoAutoProperties] WorkflowExecutionContext sut,
+ [AutofixtureServiceProvider] IServiceProvider serviceProvider,
+ [OmitOnRecursion] WorkflowExecutionContext workflowExecutionContext,
+ IActivityBlueprint activityBlueprint,
+ CancellationToken cancellationToken,
string variableName,
object variableValue)
{
+ var sut = new ActivityExecutionContext(serviceProvider, workflowExecutionContext, activityBlueprint, null, false, cancellationToken);
sut.WorkflowInstance.Variables.Set(variableName, variableValue);
sut.PurgeVariables();