diff --git a/src/core/Elsa.Abstractions/Attributes/NonPersistableAttribute.cs b/src/core/Elsa.Abstractions/Attributes/NonPersistableAttribute.cs new file mode 100644 index 000000000..734651440 --- /dev/null +++ b/src/core/Elsa.Abstractions/Attributes/NonPersistableAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace Elsa.Attributes +{ + [AttributeUsage(AttributeTargets.Property)] + public class NonPersistableAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs b/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs index 5b16281b4..81984d4bc 100644 --- a/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs +++ b/src/core/Elsa.Abstractions/Services/ActivityPropertyProviders.cs @@ -71,6 +71,10 @@ namespace Elsa.Services if (value != null) { property.SetValue(activity, value); + + if (property.GetCustomAttribute() is not null) + return; + activityExecutionContext.SetState(property.Name, value); } } diff --git a/src/core/Elsa.Core/Activities/Primitives/Inline.cs b/src/core/Elsa.Core/Activities/Primitives/Inline.cs index ee1e6e599..d167e9199 100644 --- a/src/core/Elsa.Core/Activities/Primitives/Inline.cs +++ b/src/core/Elsa.Core/Activities/Primitives/Inline.cs @@ -15,7 +15,7 @@ namespace Elsa.Activities.Primitives public class Inline : Activity { public Inline() => Function = context => new ValueTask(Done()); - [ActivityInput] public Func> Function { get; set; } + [ActivityInput, NonPersistable] public Func> Function { get; set; } protected override ValueTask OnExecuteAsync(ActivityExecutionContext context) => Function(context); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Handlers/PersistActivityPropertyState.cs b/src/core/Elsa.Core/Handlers/PersistActivityPropertyState.cs index d4c07c3b6..5d086fa1a 100644 --- a/src/core/Elsa.Core/Handlers/PersistActivityPropertyState.cs +++ b/src/core/Elsa.Core/Handlers/PersistActivityPropertyState.cs @@ -17,17 +17,18 @@ namespace Elsa.Handlers { var activity = notification.Activity; var activityType = activity.GetType(); - var properties = activityType.GetProperties().Where(x => x.GetCustomAttribute() != null || x.GetCustomAttribute() != null); + var properties = activityType.GetProperties() + .Where(x => (x.GetCustomAttribute() != null || x.GetCustomAttribute() != null) && x.GetCustomAttribute() == null); var activityExecutionContext = notification.ActivityExecutionContext; foreach (var property in properties) { var value = property.GetValue(activity); - + // TODO: Implement #898 (activity persistence providers). activityExecutionContext.SetState(property.Name, value); } - + return Task.CompletedTask; } }