YamlDotNet 的 IDeserializer 可以在 IServiceCollection 中作为单例使用吗?
Can YamlDotNet's IDeserializer be used as a singleton in IServiceCollection?
我正在像这样配置 YamlDotNet 反序列化器:
static IDeserializer CreateYamlDeserializer()
{
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithTypeConverter(new YamlEnumMemberAttributeConverter())
.IgnoreUnmatchedProperties()
.Build();
return deserializer;
}
然后我有 3 个不同的解析器,都需要通过构造函数注入反序列化器。
将反序列化器注册为单例是否安全,或者每个服务是否需要自己的实例(瞬态),因为解析器可以运行并行?
services.AddSingleton<IDeserializer>(CreateYamlDeserializer());
// or: services.AddTransient<IDeserializer>(provider => CreateYamlDeserializer());
services.AddSingleton<YamlParserA>();
services.AddSingleton<YamlParserB>();
services.AddSingleton<YamlParserC>();
Serializer 和 Deserializer 是线程安全的,可以(并且应该)用作单例。
我正在像这样配置 YamlDotNet 反序列化器:
static IDeserializer CreateYamlDeserializer()
{
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithTypeConverter(new YamlEnumMemberAttributeConverter())
.IgnoreUnmatchedProperties()
.Build();
return deserializer;
}
然后我有 3 个不同的解析器,都需要通过构造函数注入反序列化器。
将反序列化器注册为单例是否安全,或者每个服务是否需要自己的实例(瞬态),因为解析器可以运行并行?
services.AddSingleton<IDeserializer>(CreateYamlDeserializer());
// or: services.AddTransient<IDeserializer>(provider => CreateYamlDeserializer());
services.AddSingleton<YamlParserA>();
services.AddSingleton<YamlParserB>();
services.AddSingleton<YamlParserC>();
Serializer 和 Deserializer 是线程安全的,可以(并且应该)用作单例。