diff --git a/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs b/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs index 9061b32ec..04e0307af 100644 --- a/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs +++ b/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs @@ -65,8 +65,7 @@ namespace Elsa.Services } catch(Exception e) { - throw new CannotSetActivityPropertyValueException($@"An exception was thrown whilst setting '{activity?.GetType().Name}.{property.Name}'. -See the inner exception for further details.", e); + throw new CannotSetActivityPropertyValueException($@"An exception was thrown whilst setting '{activity?.GetType().Name}.{property.Name}'. See the inner exception for further details.", e); } } } diff --git a/src/core/Elsa.Abstractions/Services/IActivityActivator.cs b/src/core/Elsa.Abstractions/Services/IActivityActivator.cs index 82cb03462..9c7e28e06 100644 --- a/src/core/Elsa.Abstractions/Services/IActivityActivator.cs +++ b/src/core/Elsa.Abstractions/Services/IActivityActivator.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; using Elsa.Services.Models; @@ -6,11 +7,12 @@ namespace Elsa.Services { public interface IActivityActivator { - Task ActivateActivityAsync(ActivityExecutionContext context, Type type); + Task ActivateActivityAsync(ActivityExecutionContext context, Type type, CancellationToken cancellationToken = default); } public static class ActivityActivatorExtensions { - public static async Task ActivateActivityAsync(this IActivityActivator activityActivator, ActivityExecutionContext context) where T : IActivity => (T) await activityActivator.ActivateActivityAsync(context, typeof(T)); + public static async Task ActivateActivityAsync(this IActivityActivator activityActivator, ActivityExecutionContext context, CancellationToken cancellationToken = default) where T : IActivity => + (T) await activityActivator.ActivateActivityAsync(context, typeof(T), cancellationToken); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Services/ActivityActivator.cs b/src/core/Elsa.Core/Services/ActivityActivator.cs index bae441f72..9d214f713 100644 --- a/src/core/Elsa.Core/Services/ActivityActivator.cs +++ b/src/core/Elsa.Core/Services/ActivityActivator.cs @@ -1,6 +1,8 @@ using System; +using System.Threading; using System.Threading.Tasks; using Elsa.Activities.ControlFlow; +using Elsa.ActivityProviders; using Elsa.Services.Models; namespace Elsa.Services @@ -14,7 +16,7 @@ namespace Elsa.Services _elsaOptions = options; } - public async Task ActivateActivityAsync(ActivityExecutionContext context, Type type) + public async Task ActivateActivityAsync(ActivityExecutionContext context, Type type, CancellationToken cancellationToken = default) { var activity = _elsaOptions.ActivityFactory.CreateService(type, context.ServiceProvider); activity.Data = context.GetData(); @@ -22,7 +24,13 @@ namespace Elsa.Services // TODO: Make extensible / apply open/closed. if(ShouldSetProperties(activity)) + { + // TODO: Figure out how to deal with dynamically defined properties and what it means to set values to these. + // ActivityTypes can have dynamic properties, so they need to be able to "intercept" when values are being applied. + // Right now, we can only set these values on properties of the IActivity implementation. + //var activityType = await _activityTypeService.GetActivityTypeAsync(activity.Type, cancellationToken); await context.WorkflowExecutionContext.WorkflowBlueprint.ActivityPropertyProviders.SetActivityPropertiesAsync(activity, context, context.CancellationToken); + } return activity; }