Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can YamlDotNet's IDeserializer be used as a singleton in IServiceCollection?

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>();
like image 995
Krumelur Avatar asked Oct 23 '25 02:10

Krumelur


1 Answers

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

like image 57
Antoine Aubry Avatar answered Oct 27 '25 03:10

Antoine Aubry



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!