| 1234567891011121314151617181920212223242526272829303132333435 | 
							- using System;
 
- using System.Collections.Concurrent;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Reflection;
 
- namespace OpenSEMI.Core.Container
 
- {
 
- 	internal class ConstructorCache
 
- 	{
 
- 		private static ConcurrentDictionary<Type, ConstructorInfo> _constructorCache = new ConcurrentDictionary<Type, ConstructorInfo>();
 
- 		public static ConstructorInfo GetConstructor(Type type)
 
- 		{
 
- 			if (!_constructorCache.TryGetValue(type, out ConstructorInfo value))
 
- 			{
 
- 				ConstructorInfo constructorInfo2 = _constructorCache[type] = DiscoverConstructor(type.GetTypeInfo());
 
- 				value = constructorInfo2;
 
- 				return value;
 
- 			}
 
- 			return value;
 
- 		}
 
- 		private static ConstructorInfo DiscoverConstructor(TypeInfo typeInfo)
 
- 		{
 
- 			IEnumerable<ConstructorInfo> declaredConstructors = typeInfo.DeclaredConstructors;
 
- 			if (declaredConstructors.Any())
 
- 			{
 
- 				return declaredConstructors.First();
 
- 			}
 
- 			return null;
 
- 		}
 
- 	}
 
- }
 
 
  |