From 42067c035c6156aa13c81346d3aeca2bf4f5251a Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sun, 7 Jul 2024 16:25:26 +0200 Subject: [PATCH] Refactor PolymorphicObjectConverterFactory constructor Separated dependency injection in PolymorphicObjectConverterFactory into explicit constructor. Added a default constructor for attribute usage, ensuring WellKnownTypeRegistry is initialized uniformly. --- .../PolymorphicObjectConverterFactory.cs | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverterFactory.cs b/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverterFactory.cs index a522ccb8c..4a8cdcb7e 100644 --- a/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverterFactory.cs +++ b/src/modules/Elsa.Workflows.Core/Serialization/Converters/PolymorphicObjectConverterFactory.cs @@ -2,26 +2,45 @@ using System.Dynamic; using System.Text.Json; using System.Text.Json.Serialization; using Elsa.Expressions.Contracts; +using Elsa.Expressions.Services; namespace Elsa.Workflows.Serialization.Converters; /// /// A JSON converter factory that creates instances. /// -public class PolymorphicObjectConverterFactory(IWellKnownTypeRegistry wellKnownTypeRegistry) : JsonConverterFactory +public class PolymorphicObjectConverterFactory : JsonConverterFactory { + private readonly IWellKnownTypeRegistry _wellKnownTypeRegistry; + + /// + /// A JSON converter factory that creates instances. + /// + public PolymorphicObjectConverterFactory(IWellKnownTypeRegistry wellKnownTypeRegistry) + { + _wellKnownTypeRegistry = wellKnownTypeRegistry; + } + + /// + /// Default constructor for use with attributes. + /// + public PolymorphicObjectConverterFactory() + { + _wellKnownTypeRegistry = WellKnownTypeRegistry.CreateDefault(); + } + /// public override bool CanConvert(Type typeToConvert) { if (typeToConvert.IsClass && typeToConvert == typeof(object) || typeToConvert == typeof(ExpandoObject) - || typeToConvert == typeof(Dictionary)) - return true; - - if (typeToConvert.IsInterface - && typeToConvert == typeof(IDictionary)) - return true; + || typeToConvert == typeof(Dictionary)) + return true; + + if (typeToConvert.IsInterface + && typeToConvert == typeof(IDictionary)) + return true; return false; } @@ -30,8 +49,8 @@ public class PolymorphicObjectConverterFactory(IWellKnownTypeRegistry wellKnownT public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { if (typeof(IDictionary).IsAssignableFrom(typeToConvert)) - return new PolymorphicDictionaryConverter(options, wellKnownTypeRegistry); + return new PolymorphicDictionaryConverter(options, _wellKnownTypeRegistry); - return new PolymorphicObjectConverter(wellKnownTypeRegistry); + return new PolymorphicObjectConverter(_wellKnownTypeRegistry); } } \ No newline at end of file