using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Flowsharp.Activities; using Flowsharp.Handlers; using Flowsharp.Models; using Flowsharp.Results; namespace Flowsharp.Services { public class ActivityInvoker : IActivityInvoker { private readonly IDictionary handlers; public ActivityInvoker(IEnumerable handlers) { this.handlers = handlers.ToDictionary(x => x.ActivityType); } public async Task CanExecuteAsync(IActivity activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) { return await GetHandlerFor(activity).CanExecuteAsync(activity, workflowContext, cancellationToken); } public async Task ExecuteAsync(IActivity activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) { return await GetHandlerFor(activity).ExecuteAsync(activity, workflowContext, cancellationToken); } public async Task ResumeAsync(IActivity activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken) { return await GetHandlerFor(activity).ResumeAsync(activity, workflowContext, cancellationToken); } private IActivityHandler GetHandlerFor(IActivity activity) { return handlers[activity.GetType()]; } } }