namespace DIT.Workflower.DependencyInjection; public class DefaultWorkflowFactory : IWorkflowFactory where TState : struct where TCommand : struct { private readonly IServiceProvider _serviceProvider; public DefaultWorkflowFactory(IServiceProvider sp) { _serviceProvider = sp; } public IWorkflow CreateWorkflow(string id) => CreateWorkflow(id, version: 1); public IWorkflow CreateWorkflow(string id, int version) { var reference = $"{id}.v{version}"; var service = _serviceProvider.GetServices>() .FirstOrDefault(x => x.Reference == reference); if (service is null) throw new ArgumentOutOfRangeException(nameof(version), $"Workflow reference {id}.v{version} does not exist"); return service; } }