Introduce NonPersistableAttribute to control what gets persisted in state
This commit is contained in:
parent
3eaefab72f
commit
79131e2dde
|
|
@ -0,0 +1,9 @@
|
|||
using System;
|
||||
|
||||
namespace Elsa.Attributes
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Property)]
|
||||
public class NonPersistableAttribute : Attribute
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -71,6 +71,10 @@ namespace Elsa.Services
|
|||
if (value != null)
|
||||
{
|
||||
property.SetValue(activity, value);
|
||||
|
||||
if (property.GetCustomAttribute<NonPersistableAttribute>() is not null)
|
||||
return;
|
||||
|
||||
activityExecutionContext.SetState(property.Name, value);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace Elsa.Activities.Primitives
|
|||
public class Inline : Activity
|
||||
{
|
||||
public Inline() => Function = context => new ValueTask<IActivityExecutionResult>(Done());
|
||||
[ActivityInput] public Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> Function { get; set; }
|
||||
[ActivityInput, NonPersistable] public Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> Function { get; set; }
|
||||
protected override ValueTask<IActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext context) => Function(context);
|
||||
}
|
||||
}
|
||||
|
|
@ -17,17 +17,18 @@ namespace Elsa.Handlers
|
|||
{
|
||||
var activity = notification.Activity;
|
||||
var activityType = activity.GetType();
|
||||
var properties = activityType.GetProperties().Where(x => x.GetCustomAttribute<ActivityInputAttribute>() != null || x.GetCustomAttribute<ActivityOutputAttribute>() != null);
|
||||
var properties = activityType.GetProperties()
|
||||
.Where(x => (x.GetCustomAttribute<ActivityInputAttribute>() != null || x.GetCustomAttribute<ActivityOutputAttribute>() != null) && x.GetCustomAttribute<NonPersistableAttribute>() == 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue