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;