internal static TraceLoggingTypeInfo <DataType> GetInstance(List <Type> recursionCheck) { if (instance == null) { var recursionCheckCount = recursionCheck.Count; var newInstance = Statics.CreateDefaultTypeInfo <DataType>(recursionCheck); Interlocked.CompareExchange(ref instance, newInstance, null); recursionCheck.RemoveRange(recursionCheckCount, recursionCheck.Count - recursionCheckCount); } return(instance); }
public static TraceLoggingTypeInfo GetInstance(Type type, List <Type>?recursionCheck) { Dictionary <Type, TraceLoggingTypeInfo> cache = threadCache ??= new Dictionary <Type, TraceLoggingTypeInfo>(); if (!cache.TryGetValue(type, out TraceLoggingTypeInfo? instance)) { recursionCheck ??= new List <Type>(); int recursionCheckCount = recursionCheck.Count; instance = Statics.CreateDefaultTypeInfo(type, recursionCheck); cache[type] = instance; recursionCheck.RemoveRange(recursionCheckCount, recursionCheck.Count - recursionCheckCount); } return(instance); }
public static TraceLoggingTypeInfo GetInstance(Type type, List <Type> recursionCheck) { var cache = threadCache ?? (threadCache = new Dictionary <Type, TraceLoggingTypeInfo>()); TraceLoggingTypeInfo instance; if (!cache.TryGetValue(type, out instance)) { if (recursionCheck == null) { recursionCheck = new List <Type>(); } var recursionCheckCount = recursionCheck.Count; instance = Statics.CreateDefaultTypeInfo(type, recursionCheck); cache[type] = instance; recursionCheck.RemoveRange(recursionCheckCount, recursionCheck.Count - recursionCheckCount); } return(instance); }