示例#1
0
 internal static TraceLoggingTypeInfo <DataType> GetInstance(List <Type> recursionCheck)
 {
     if (TraceLoggingTypeInfo <DataType> .instance == null)
     {
         int count = recursionCheck.Count;
         TraceLoggingTypeInfo <DataType> defaultTypeInfo = Statics.CreateDefaultTypeInfo <DataType>(recursionCheck);
         Interlocked.CompareExchange <TraceLoggingTypeInfo <DataType> >(ref TraceLoggingTypeInfo <DataType> .instance, defaultTypeInfo, (TraceLoggingTypeInfo <DataType>)null);
         recursionCheck.RemoveRange(count, recursionCheck.Count - count);
     }
     return(TraceLoggingTypeInfo <DataType> .instance);
 }
示例#2
0
        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);
        }