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>();
The Serializer and Deserializer are thread safe and can (and should) be used as singletons.