1234567891011121314151617181920212223242526272829303132 |
- using System;
- using System.Collections.Concurrent;
- 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)
- {
- ConstructorInfo constructor;
- if (!_constructorCache.TryGetValue(type, out constructor))
- constructor = _constructorCache[type] = DiscoverConstructor(type.GetTypeInfo());
- return constructor;
- }
- private static ConstructorInfo DiscoverConstructor(TypeInfo typeInfo)
- {
- var constructors = typeInfo.DeclaredConstructors;
- if (constructors.Any())
- return constructors.First();
- return null;
- }
- }
- }
|