@@ -17,7 +17,8 @@ namespace Datra.Serializers
1717 public class DataSerializerFactory
1818 {
1919 private readonly IDataSerializer _jsonSerializer ;
20- private readonly IDataSerializer _yamlSerializer ;
20+ private readonly Func < IDataSerializer > _createYamlSerializer ;
21+ private IDataSerializer ? _yamlSerializer ;
2122
2223 /// <summary>
2324 /// Reflection-mode JSON. Trim/AOT-unsafe — explicit opt-in suitable for tooling/tests.
@@ -29,7 +30,7 @@ public class DataSerializerFactory
2930 public DataSerializerFactory ( )
3031 {
3132 _jsonSerializer = SystemTextJsonDataSerializer . CreateReflectionUnsafe ( ) ;
32- _yamlSerializer = new YamlDataSerializer ( ) ;
33+ _createYamlSerializer = CreateDefaultYamlSerializer ;
3334 }
3435
3536 /// <summary>
@@ -39,7 +40,7 @@ public DataSerializerFactory(JsonSerializerContext jsonContext)
3940 {
4041 if ( jsonContext == null ) throw new ArgumentNullException ( nameof ( jsonContext ) ) ;
4142 _jsonSerializer = new SystemTextJsonDataSerializer ( jsonContext ) ;
42- _yamlSerializer = new YamlDataSerializer ( ) ;
43+ _createYamlSerializer = CreateDefaultYamlSerializer ;
4344 }
4445
4546#if NET8_0_OR_GREATER
@@ -72,7 +73,7 @@ public DataSerializerFactory(
7273 IEnumerable < Type > ? excludedTypes )
7374 {
7475 _jsonSerializer = SystemTextJsonDataSerializer . CreateReflectionUnsafe ( ) ;
75- _yamlSerializer = new YamlDataSerializer ( polymorphicBaseTypes , customYamlConverters , excludedTypes ) ;
76+ _createYamlSerializer = ( ) => new YamlDataSerializer ( polymorphicBaseTypes , customYamlConverters , excludedTypes ) ;
7677 }
7778
7879 public IDataSerializer GetSerializer ( string filePath , DataFormat format = DataFormat . Auto )
@@ -85,10 +86,16 @@ public IDataSerializer GetSerializer(string filePath, DataFormat format = DataFo
8586 return format switch
8687 {
8788 DataFormat . Json => _jsonSerializer ,
88- DataFormat . Yaml => _yamlSerializer ,
89+ DataFormat . Yaml => GetYamlSerializer ( ) ,
8990 DataFormat . Csv => throw new NotSupportedException ( "CSV format should be handled by source-generated serializers, not by DataSerializer." ) ,
9091 _ => throw new NotSupportedException ( $ "Data format { format } is not supported.")
9192 } ;
9293 }
94+
95+ private IDataSerializer GetYamlSerializer ( )
96+ => _yamlSerializer ?? ( _yamlSerializer = _createYamlSerializer ( ) ) ;
97+
98+ private static IDataSerializer CreateDefaultYamlSerializer ( )
99+ => new YamlDataSerializer ( ) ;
93100 }
94101}
0 commit comments