Skip to content

Instantly share code, notes, and snippets.

@sfmskywalker
Created September 11, 2020 18:45
Show Gist options
  • Save sfmskywalker/f290d2ab5a5cf7c5aa33238929b02509 to your computer and use it in GitHub Desktop.
Save sfmskywalker/f290d2ab5a5cf7c5aa33238929b02509 to your computer and use it in GitHub Desktop.

Revisions

  1. sfmskywalker created this gist Sep 11, 2020.
    36 changes: 36 additions & 0 deletions JsonWorkflowProvider.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Threading;
    using System.Threading.Tasks;
    using Elsa.Models;
    using Elsa.Serialization;
    using Elsa.Services;
    using Microsoft.Extensions.Configuration;

    public class JsonWorkflowProvider : IWorkflowProvider
    {
    private readonly IWorkflowSerializer _serializer;
    private readonly IConfiguration _configuration;

    public JsonWorkflowProvider(IWorkflowSerializer serializer, IConfiguration configuration)
    {
    _serializer = serializer;
    _configuration = configuration;
    }

    public async Task<IEnumerable<WorkflowDefinitionVersion>> GetWorkflowDefinitionsAsync(CancellationToken cancellationToken)
    {
    var workflowsDirectoryPath = _configuration["WorkflowPath"];
    var workflowFiles = Directory.GetFiles(workflowsDirectoryPath, "*.json");
    var workflowDefinitionTasks = workflowFiles.Select(LoadWorkflowDefinition).ToList();
    await Task.WhenAll(workflowDefinitionTasks);
    return workflowDefinitionTasks.Select(x => x.Result);
    }

    private async Task<WorkflowDefinitionVersion> LoadWorkflowDefinition(string path)
    {
    var jsonText = await File.ReadAllTextAsync(path);
    return _serializer.Deserialize<WorkflowDefinitionVersion>(jsonText, JsonTokenFormatter.FormatName);
    }
    }