public async Task Handle(RequestingWorkflowInstance notification, CancellationToken cancellationToken) { var workflowBlueprint = notification.WorkflowBlueprint; var activityData = notification.WorkflowInstance.ActivityData; foreach (var entry in activityData.Where(x => x.Key != workflowBlueprint.Id)) { var activityId = entry.Key; var activityBlueprint = workflowBlueprint.GetActivity(activityId) !; var context = new ActivityStateFilterContext(entry.Value, activityBlueprint); foreach (var filter in _filters) { await filter.ApplyAsync(context); } } }
protected override void Apply(ActivityStateFilterContext context) { // We're only interested in our StoreUser activity. if (context.ActivityBlueprint.Type != nameof(StoreUser)) { return; } // Redact the password field. if (context.ActivityData["User"] is User user) { context.ActivityData["User"] = user with { Password = "******" } } ; }
protected virtual Task ApplyAsync(ActivityStateFilterContext context) { Apply(context); return(Task.CompletedTask); }
protected virtual void Apply(ActivityStateFilterContext context) { }
async ValueTask IActivityStateFilter.ApplyAsync(ActivityStateFilterContext context) => await ApplyAsync(context);