From d2777f70dedad8da5ac7abb8d8adb2d7671c7310 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 6 Jan 2025 17:13:20 +0100 Subject: [PATCH] Refactor reference handling to use a wrapper class Replaced direct use of `CrossScopedReferenceHandler` with `PerCallReferenceHandlerWrapper` for improved abstraction and reusability. Updated `ApplyOptions` to leverage the new wrapper, simplifying reference resolver management. Commented out redundant code to streamline the implementation. --- .../CrossScopedReferenceHandler.cs | 8 ++++++++ .../JsonWorkflowStateSerializer.cs | 19 ++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/modules/Elsa.Workflows.Core/Serialization/ReferenceHandlers/CrossScopedReferenceHandler.cs b/src/modules/Elsa.Workflows.Core/Serialization/ReferenceHandlers/CrossScopedReferenceHandler.cs index 32477b95c..fcabf5237 100644 --- a/src/modules/Elsa.Workflows.Core/Serialization/ReferenceHandlers/CrossScopedReferenceHandler.cs +++ b/src/modules/Elsa.Workflows.Core/Serialization/ReferenceHandlers/CrossScopedReferenceHandler.cs @@ -24,4 +24,12 @@ public class CrossScopedReferenceHandler : ReferenceHandler /// /// The reference resolver. public ReferenceResolver GetResolver() => _rootedResolver!; +} + +public class PerCallReferenceHandlerWrapper : ReferenceHandler +{ + public override ReferenceResolver CreateResolver() + { + return new CrossScopedReferenceHandler().CreateResolver(); + } } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Serialization/Serializers/JsonWorkflowStateSerializer.cs b/src/modules/Elsa.Workflows.Core/Serialization/Serializers/JsonWorkflowStateSerializer.cs index 681893fca..80be1aa78 100644 --- a/src/modules/Elsa.Workflows.Core/Serialization/Serializers/JsonWorkflowStateSerializer.cs +++ b/src/modules/Elsa.Workflows.Core/Serialization/Serializers/JsonWorkflowStateSerializer.cs @@ -126,14 +126,19 @@ public class JsonWorkflowStateSerializer : ConfigurableSerializer, IWorkflowStat return JsonSerializer.Deserialize(serializedState, options)!; } - /// - public override JsonSerializerOptions GetOptions() + // /// + // public override JsonSerializerOptions GetOptions() + // { + // var options = base.GetOptions(); + // return new JsonSerializerOptions(options) + // { + // ReferenceHandler = new CrossScopedReferenceHandler() + // }; + // } + + public override void ApplyOptions(JsonSerializerOptions options) { - var options = base.GetOptions(); - return new JsonSerializerOptions(options) - { - ReferenceHandler = new CrossScopedReferenceHandler() - }; + options.ReferenceHandler = new PerCallReferenceHandlerWrapper(); } ///