Refactor PolymorphicObjectConverterFactory constructor

Separated dependency injection in PolymorphicObjectConverterFactory into explicit constructor. Added a default constructor for attribute usage, ensuring WellKnownTypeRegistry is initialized uniformly.
This commit is contained in:
Sipke Schoorstra 2024-07-07 16:25:26 +02:00
parent 469d909ded
commit 42067c035c

View file

@ -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;
/// <summary>
/// A JSON converter factory that creates <see cref="PolymorphicObjectConverter"/> instances.
/// </summary>
public class PolymorphicObjectConverterFactory(IWellKnownTypeRegistry wellKnownTypeRegistry) : JsonConverterFactory
public class PolymorphicObjectConverterFactory : JsonConverterFactory
{
private readonly IWellKnownTypeRegistry _wellKnownTypeRegistry;
/// <summary>
/// A JSON converter factory that creates <see cref="PolymorphicObjectConverter"/> instances.
/// </summary>
public PolymorphicObjectConverterFactory(IWellKnownTypeRegistry wellKnownTypeRegistry)
{
_wellKnownTypeRegistry = wellKnownTypeRegistry;
}
/// <summary>
/// Default constructor for use with attributes.
/// </summary>
public PolymorphicObjectConverterFactory()
{
_wellKnownTypeRegistry = WellKnownTypeRegistry.CreateDefault();
}
/// <inheritdoc />
public override bool CanConvert(Type typeToConvert)
{
if (typeToConvert.IsClass
&& typeToConvert == typeof(object)
|| typeToConvert == typeof(ExpandoObject)
|| typeToConvert == typeof(Dictionary<string, object>))
return true;
if (typeToConvert.IsInterface
&& typeToConvert == typeof(IDictionary<string, object>))
return true;
|| typeToConvert == typeof(Dictionary<string, object>))
return true;
if (typeToConvert.IsInterface
&& typeToConvert == typeof(IDictionary<string, object>))
return true;
return false;
}
@ -30,8 +49,8 @@ public class PolymorphicObjectConverterFactory(IWellKnownTypeRegistry wellKnownT
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
{
if (typeof(IDictionary<string, object>).IsAssignableFrom(typeToConvert))
return new PolymorphicDictionaryConverter(options, wellKnownTypeRegistry);
return new PolymorphicDictionaryConverter(options, _wellKnownTypeRegistry);
return new PolymorphicObjectConverter(wellKnownTypeRegistry);
return new PolymorphicObjectConverter(_wellKnownTypeRegistry);
}
}