diff --git a/src/modules/Elsa.Workflows.Core/Activities/For.cs b/src/modules/Elsa.Workflows.Core/Activities/For.cs index 9d2d3cee2..1867a0d72 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/For.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/For.cs @@ -20,7 +20,7 @@ public class For : Activity [JsonConstructor] public For() { - Behaviors.Add(); + Behaviors.Add(this); Behaviors.Remove(); } diff --git a/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs b/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs index fe577567e..d6a1dd20f 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs @@ -13,7 +13,7 @@ public class ForEach : Activity public ForEach() { - Behaviors.Add(); + Behaviors.Add(this); Behaviors.Remove(); } diff --git a/src/modules/Elsa.Workflows.Core/Activities/While.cs b/src/modules/Elsa.Workflows.Core/Activities/While.cs index 52b6e26f9..23b89a23b 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/While.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/While.cs @@ -19,7 +19,7 @@ public class While : Activity public While(IActivity? body = default) { Body = body!; - Behaviors.Add(); + Behaviors.Add(this); Behaviors.Remove(); } diff --git a/src/modules/Elsa.Workflows.Core/Behaviors/AutoCompleteBehavior.cs b/src/modules/Elsa.Workflows.Core/Behaviors/AutoCompleteBehavior.cs index 00c713cb2..615ba8e79 100644 --- a/src/modules/Elsa.Workflows.Core/Behaviors/AutoCompleteBehavior.cs +++ b/src/modules/Elsa.Workflows.Core/Behaviors/AutoCompleteBehavior.cs @@ -1,4 +1,5 @@ using Elsa.Workflows.Core.Models; +using Elsa.Workflows.Core.Services; namespace Elsa.Workflows.Core.Behaviors; @@ -7,6 +8,10 @@ namespace Elsa.Workflows.Core.Behaviors; /// public class AutoCompleteBehavior : Behavior { + public AutoCompleteBehavior(IActivity owner) : base(owner) + { + } + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { // If the activity created any bookmarks, do not complete. diff --git a/src/modules/Elsa.Workflows.Core/Behaviors/BreakBehavior.cs b/src/modules/Elsa.Workflows.Core/Behaviors/BreakBehavior.cs index b41835615..c1631a62e 100644 --- a/src/modules/Elsa.Workflows.Core/Behaviors/BreakBehavior.cs +++ b/src/modules/Elsa.Workflows.Core/Behaviors/BreakBehavior.cs @@ -9,7 +9,7 @@ namespace Elsa.Workflows.Core.Behaviors; /// public class BreakBehavior : Behavior { - public BreakBehavior() + public BreakBehavior(IActivity owner) : base(owner) { OnSignalReceived(OnBreakAsync); } @@ -23,12 +23,6 @@ public class BreakBehavior : Behavior var childActivityExecutionContexts = context.ActivityExecutionContext.GetChildren().ToList(); context.ActivityExecutionContext.WorkflowExecutionContext.RemoveActivityExecutionContexts(childActivityExecutionContexts); - // Remove bookmarks. - // foreach (var childActivityExecutionContext in childActivityExecutionContexts) - // { - // childActivityExecutionContext.Bookmarks - // } - // Mark this activity as completed. await context.ActivityExecutionContext.CompleteActivityAsync(); } diff --git a/src/modules/Elsa.Workflows.Core/Extensions/BehaviorCollectionExtensions.cs b/src/modules/Elsa.Workflows.Core/Extensions/BehaviorCollectionExtensions.cs index c80c0ac70..4451a0bbe 100644 --- a/src/modules/Elsa.Workflows.Core/Extensions/BehaviorCollectionExtensions.cs +++ b/src/modules/Elsa.Workflows.Core/Extensions/BehaviorCollectionExtensions.cs @@ -4,7 +4,7 @@ namespace Elsa.Workflows.Core; public static class BehaviorCollectionExtensions { - public static void Add(this ICollection behaviors) where T : IBehavior => behaviors.Add((T)Activator.CreateInstance(typeof(T))!); + public static void Add(this ICollection behaviors, IActivity owner) where T : IBehavior => behaviors.Add((T)Activator.CreateInstance(typeof(T), owner)!); public static void Remove(this ICollection behaviors) where T : IBehavior { diff --git a/src/modules/Elsa.Workflows.Core/Models/Activity.cs b/src/modules/Elsa.Workflows.Core/Models/Activity.cs index cb11d325a..ad325dcb6 100644 --- a/src/modules/Elsa.Workflows.Core/Models/Activity.cs +++ b/src/modules/Elsa.Workflows.Core/Models/Activity.cs @@ -14,8 +14,9 @@ public abstract class Activity : IActivity, ISignalHandler protected Activity() { TypeName = ActivityTypeNameHelper.GenerateTypeName(GetType()); - Behaviors.Add(); - Behaviors.Add(); + Behaviors.Add(this); + Behaviors.Add(this); + Behaviors.Add(this); } protected Activity(string activityType) : this() diff --git a/src/modules/Elsa.Workflows.Core/Models/Behavior.cs b/src/modules/Elsa.Workflows.Core/Models/Behavior.cs index 4c4071efa..980d61667 100644 --- a/src/modules/Elsa.Workflows.Core/Models/Behavior.cs +++ b/src/modules/Elsa.Workflows.Core/Models/Behavior.cs @@ -6,6 +6,12 @@ public abstract class Behavior : IBehavior { private readonly ICollection _signalHandlers = new List(); + public Behavior(IActivity owner) + { + Owner = owner; + } + + public IActivity Owner { get; } protected void OnSignalReceived(Type signalType, Func handler) => _signalHandlers.Add(new SignalHandlerRegistration(signalType, handler)); protected void OnSignalReceived(Func handler) => OnSignalReceived(typeof(T), (signal, context) => handler((T)signal, context)); diff --git a/src/modules/Elsa.Workflows.Core/Services/IBehavior.cs b/src/modules/Elsa.Workflows.Core/Services/IBehavior.cs index 457b68cb6..bea8d4534 100644 --- a/src/modules/Elsa.Workflows.Core/Services/IBehavior.cs +++ b/src/modules/Elsa.Workflows.Core/Services/IBehavior.cs @@ -4,6 +4,11 @@ namespace Elsa.Workflows.Core.Services; public interface IBehavior : ISignalHandler { + /// + /// The owner of this behavior. + /// + IActivity Owner { get; } + /// /// Invoked when the activity executes. ///