Add WorkflowSerializer service for simplifies workflow deserialization

This commit is contained in:
Sipke Schoorstra 2023-10-20 11:36:12 +02:00
parent 366ce2fabd
commit d6481133fd
3 changed files with 49 additions and 0 deletions

View file

@ -0,0 +1,16 @@
using Elsa.Workflows.Core.Activities;
namespace Elsa.Workflows.Management.Contracts;
/// <summary>
/// Serializes and deserializes workflows.
/// </summary>
public interface IWorkflowSerializer
{
/// <summary>
/// Serializes the specified workflow.
/// </summary>
/// <param name="serializedWorkflow">The data representing the workflow.</param>
/// <returns>A deserialized workflow.</returns>
Workflow Deserialize(string serializedWorkflow);
}

View file

@ -159,6 +159,7 @@ public class WorkflowManagementFeature : FeatureBase
.AddMemoryStore<WorkflowInstance, MemoryWorkflowInstanceStore>()
.AddActivityProvider<TypedActivityProvider>()
.AddSingleton<IWorkflowDefinitionService, WorkflowDefinitionService>()
.AddSingleton<IWorkflowSerializer, WorkflowSerializer>()
.AddSingleton<IWorkflowValidator, WorkflowValidator>()
.AddSingleton<IWorkflowDefinitionPublisher, WorkflowDefinitionPublisher>()
.AddSingleton<IWorkflowDefinitionImporter, WorkflowDefinitionImporter>()

View file

@ -0,0 +1,32 @@
using Elsa.Workflows.Core.Activities;
using Elsa.Workflows.Core.Contracts;
using Elsa.Workflows.Management.Contracts;
using Elsa.Workflows.Management.Mappers;
using Elsa.Workflows.Management.Models;
namespace Elsa.Workflows.Management.Services;
/// <summary>
/// A serializer that parses JSON.
/// </summary>
public class WorkflowSerializer : IWorkflowSerializer
{
private readonly IApiSerializer _apiSerializer;
private readonly WorkflowDefinitionMapper _workflowDefinitionMapper;
/// <summary>
/// Initializes a new instance of the <see cref="WorkflowSerializer"/> class.
/// </summary>
public WorkflowSerializer(IApiSerializer apiSerializer, WorkflowDefinitionMapper workflowDefinitionMapper)
{
_apiSerializer = apiSerializer;
_workflowDefinitionMapper = workflowDefinitionMapper;
}
/// <inheritdoc />
public Workflow Deserialize(string serializedWorkflow)
{
var model = _apiSerializer.Deserialize<WorkflowDefinitionModel>(serializedWorkflow);
return _workflowDefinitionMapper.Map(model);
}
}