ParameterCache.cs 1017 B

123456789101112131415161718192021222324252627282930
  1. using System.Collections.Concurrent;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. namespace OpenSEMI.Core.Container
  6. {
  7. internal class ParameterCache
  8. {
  9. private static ConcurrentDictionary<ConstructorInfo, List<ParameterInfo>> _parameterCache = new ConcurrentDictionary<ConstructorInfo, List<ParameterInfo>>();
  10. public static List<ParameterInfo> GetParameters(ConstructorInfo constructor)
  11. {
  12. List<ParameterInfo> parameterInfo;
  13. if (!_parameterCache.TryGetValue(constructor, out parameterInfo))
  14. {
  15. // Not in cache, discover and add to cache.
  16. parameterInfo = _parameterCache[constructor] = DiscoverParameters(constructor);
  17. }
  18. return parameterInfo;
  19. }
  20. private static List<ParameterInfo> DiscoverParameters(ConstructorInfo constructor)
  21. {
  22. return constructor.GetParameters().ToList();
  23. }
  24. }
  25. }