Sic01/FrameworkLocal/UIClient/Core/Container/ParameterCache.cs

30 lines
988 B
C#

using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace OpenSEMI.Core.Container
{
internal class ParameterCache
{
private static ConcurrentDictionary<ConstructorInfo, List<ParameterInfo>> _parameterCache = new ConcurrentDictionary<ConstructorInfo, List<ParameterInfo>>();
public static List<ParameterInfo> GetParameters(ConstructorInfo constructor)
{
List<ParameterInfo> parameterInfo;
if (!_parameterCache.TryGetValue(constructor, out parameterInfo))
{
// Not in cache, discover and add to cache.
parameterInfo = _parameterCache[constructor] = DiscoverParameters(constructor);
}
return parameterInfo;
}
private static List<ParameterInfo> DiscoverParameters(ConstructorInfo constructor)
{
return constructor.GetParameters().ToList();
}
}
}