Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 2bfa5bb

Browse files
committed
Merge pull request #2309 from dotnet-bot/from-tfs
Merge changes from TFS
2 parents 9de86b6 + 84419ec commit 2bfa5bb

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,35 @@ internal abstract class DataContract
4141

4242
#if NET_NATIVE
4343
// this the global dictionary for data contracts introduced for multi-file.
44-
private static Dictionary<Type, DataContract> s_dataContracts = new Dictionary<Type, DataContract>();
44+
private static Func<Dictionary<Type, DataContract>> s_dataContractsInitializer;
45+
private static Lazy<Dictionary<Type, DataContract>> s_dataContracts = new Lazy<Dictionary<Type, DataContract>>(InitDataContracts);
4546

46-
public static Dictionary<Type, DataContract> GetDataContracts()
47+
public static Func<Dictionary<Type, DataContract>> DataContractsInitializer
48+
{
49+
get
50+
{
51+
return s_dataContractsInitializer;
52+
}
53+
set
54+
{
55+
Fx.Assert(s_dataContractsInitializer == null, "s_dataContractsInitializer is already initialized.");
56+
s_dataContractsInitializer = value;
57+
}
58+
}
59+
60+
private static Dictionary<Type, DataContract> InitDataContracts()
61+
{
62+
if (DataContractsInitializer != null)
63+
{
64+
return DataContractsInitializer();
65+
}
66+
else
67+
{
68+
return new Dictionary<Type, DataContract>();
69+
}
70+
}
71+
72+
public static Lazy<Dictionary<Type, DataContract>> GetDataContracts()
4773
{
4874
return s_dataContracts;
4975
}
@@ -75,7 +101,7 @@ private static DataContract GetGeneratedDataContract(Type type)
75101
// this method used to be rewritten by an IL transfrom
76102
// with the restructuring for multi-file, it has become a regular method
77103
DataContract result;
78-
return s_dataContracts.TryGetValue(type, out result) ? result : null;
104+
return s_dataContracts.Value.TryGetValue(type, out result) ? result : null;
79105
}
80106

81107
internal static bool TryGetDataContractFromGeneratedAssembly(Type type, out DataContract dataContract)

src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonDataContract.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,37 @@ internal class JsonReadWriteDelegates
341341
#endif
342342
{
343343
// this is the global dictionary for JSON delegates introduced for multi-file
344-
private static Dictionary<DataContract, JsonReadWriteDelegates> s_jsonDelegates = new Dictionary<DataContract, JsonReadWriteDelegates>();
344+
private static Func<Dictionary<DataContract, JsonReadWriteDelegates>> s_jsonDelegatesInitializer;
345+
private static Lazy<Dictionary<DataContract, JsonReadWriteDelegates>> s_jsonDelegates = new Lazy<Dictionary<DataContract, JsonReadWriteDelegates>>(InitJsonDelegates);
345346

346-
public static Dictionary<DataContract, JsonReadWriteDelegates> GetJsonDelegates()
347+
public static Func<Dictionary<DataContract, JsonReadWriteDelegates>> JsonDelegatesInitializer
347348
{
348-
return s_jsonDelegates;
349+
get
350+
{
351+
return s_jsonDelegatesInitializer;
352+
}
353+
set
354+
{
355+
Fx.Assert(s_jsonDelegatesInitializer == null, "s_jsonDelegatesInitializer is already initialized.");
356+
s_jsonDelegatesInitializer = value;
357+
}
358+
}
359+
360+
private static Dictionary<DataContract, JsonReadWriteDelegates> InitJsonDelegates()
361+
{
362+
if (JsonDelegatesInitializer != null)
363+
{
364+
return JsonDelegatesInitializer();
365+
}
366+
else
367+
{
368+
return new Dictionary<DataContract, JsonReadWriteDelegates>();
369+
}
370+
}
371+
372+
internal static Dictionary<DataContract, JsonReadWriteDelegates> GetJsonDelegates()
373+
{
374+
return s_jsonDelegates.Value;
349375
}
350376

351377
public JsonFormatClassWriterDelegate ClassWriterDelegate { get; set; }

0 commit comments

Comments
 (0)