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> 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 LoadWorkflowDefinition(string path) { var jsonText = await File.ReadAllTextAsync(path); return _serializer.Deserialize(jsonText, JsonTokenFormatter.FormatName); } }