diff --git a/src/modules/Elsa.Workflows.Core/Builders/WorkflowBuilder.cs b/src/modules/Elsa.Workflows.Core/Builders/WorkflowBuilder.cs
index 645ae8aa8..3f8f67f19 100644
--- a/src/modules/Elsa.Workflows.Core/Builders/WorkflowBuilder.cs
+++ b/src/modules/Elsa.Workflows.Core/Builders/WorkflowBuilder.cs
@@ -12,15 +12,17 @@ public class WorkflowBuilder : IWorkflowBuilder
private readonly IActivityVisitor _activityVisitor;
private readonly IIdentityGraphService _identityGraphService;
private readonly IActivityRegistry _activityRegistry;
+ private readonly IIdentityGenerator _identityGenerator;
///
/// Constructor.
///
- public WorkflowBuilder(IActivityVisitor activityVisitor, IIdentityGraphService identityGraphService, IActivityRegistry activityRegistry)
+ public WorkflowBuilder(IActivityVisitor activityVisitor, IIdentityGraphService identityGraphService, IActivityRegistry activityRegistry, IIdentityGenerator identityGenerator)
{
_activityVisitor = activityVisitor;
_identityGraphService = identityGraphService;
_activityRegistry = activityRegistry;
+ _identityGenerator = identityGenerator;
Result = new Variable();
}
@@ -72,28 +74,22 @@ public class WorkflowBuilder : IWorkflowBuilder
var variable = new Variable();
Variables.Add(variable);
variable.WithWorkflowStorage();
+ variable.Id = null!; // This ensures that a deterministic ID is assigned by the builder.
return variable;
}
///
public Variable WithVariable(string name, T value)
{
- var variable = new Variable
- {
- Name = name,
- Value = value
- }.WithWorkflowStorage();
-
- Variables.Add(variable);
+ var variable = WithVariable();
return variable;
}
///
public Variable WithVariable(T value)
{
- var variable = value != null ? new Variable(value) : new Variable();
- variable.WithWorkflowStorage();
- Variables.Add(variable);
+ var variable = WithVariable();
+ variable.Value = value;
return variable;
}
@@ -135,8 +131,8 @@ public class WorkflowBuilder : IWorkflowBuilder
///
public async Task BuildWorkflowAsync(CancellationToken cancellationToken = default)
{
- var definitionId = DefinitionId ?? Guid.NewGuid().ToString("N");
- var id = Id ?? Guid.NewGuid().ToString("N");
+ var definitionId = DefinitionId ?? _identityGenerator.GenerateId();
+ var id = Id ?? _identityGenerator.GenerateId();
var root = Root ?? new Sequence();
var identity = new WorkflowIdentity(definitionId, Version, id);
var publication = WorkflowPublication.LatestAndPublished;