2

I'm configuring a YamlDotNet deserializer like this:

static IDeserializer CreateYamlDeserializer()
{
    var deserializer = new DeserializerBuilder()
    .WithNamingConvention(CamelCaseNamingConvention.Instance)
    .WithTypeConverter(new YamlEnumMemberAttributeConverter())
    .IgnoreUnmatchedProperties()
    .Build();
    return deserializer;
}

Then I have 3 different parsers, all requiring the deserializer to be injected via the constructor.

Is it safe to register the deserializer as a singleton, or would each service need its own instance (transient), given the parsers can run in parallel?

services.AddSingleton<IDeserializer>(CreateYamlDeserializer());
// or: services.AddTransient<IDeserializer>(provider => CreateYamlDeserializer());
services.AddSingleton<YamlParserA>();
services.AddSingleton<YamlParserB>();
services.AddSingleton<YamlParserC>();
Krumelur
  • 32,180
  • 27
  • 124
  • 263

1 Answers1

2

The Serializer and Deserializer are thread safe and can (and should) be used as singletons.

Antoine Aubry
  • 12,203
  • 10
  • 45
  • 74