PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/src/NUnit/core/Builders/ProviderInfo.cs

#
C# | 91 lines | 69 code | 14 blank | 8 comment | 10 complexity | 6cb8625197a8f98416a44218c1e025a7 MD5 | raw file
Possible License(s): GPL-2.0
  1. // ****************************************************************
  2. // Copyright 2008, Charlie Poole
  3. // This is free software licensed under the NUnit license. You may
  4. // obtain a copy of the license at http://nunit.org.
  5. // ****************************************************************
  6. using System;
  7. using System.Collections;
  8. using System.Reflection;
  9. namespace NUnit.Core.Builders
  10. {
  11. class ProviderReference
  12. {
  13. private Type providerType;
  14. private string providerName;
  15. private object[] providerArgs;
  16. public ProviderReference(Type providerType, string providerName)
  17. {
  18. if (providerType == null)
  19. throw new ArgumentNullException("providerType");
  20. if (providerName == null)
  21. throw new ArgumentNullException("providerName");
  22. this.providerType = providerType;
  23. this.providerName = providerName;
  24. }
  25. public ProviderReference(Type providerType, object[] args, string providerName)
  26. : this(providerType, providerName)
  27. {
  28. this.providerArgs = args;
  29. }
  30. public string Name
  31. {
  32. get { return this.providerName; }
  33. }
  34. public IEnumerable GetInstance()
  35. {
  36. MemberInfo[] members = providerType.GetMember(
  37. providerName,
  38. MemberTypes.Field | MemberTypes.Method | MemberTypes.Property,
  39. BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
  40. if (members.Length == 0)
  41. throw new Exception(string.Format(
  42. "Unable to locate {0}.{1}", providerType.FullName, providerName));
  43. return (IEnumerable)GetProviderObjectFromMember(members[0]);
  44. }
  45. private object GetProviderObjectFromMember(MemberInfo member)
  46. {
  47. object providerObject = null;
  48. object instance = null;
  49. switch (member.MemberType)
  50. {
  51. case MemberTypes.Property:
  52. PropertyInfo providerProperty = member as PropertyInfo;
  53. MethodInfo getMethod = providerProperty.GetGetMethod(true);
  54. if (!getMethod.IsStatic)
  55. //instance = ProviderCache.GetInstanceOf(providerType);
  56. instance = Reflect.Construct(providerType, providerArgs);
  57. providerObject = providerProperty.GetValue(instance, null);
  58. break;
  59. case MemberTypes.Method:
  60. MethodInfo providerMethod = member as MethodInfo;
  61. if (!providerMethod.IsStatic)
  62. //instance = ProviderCache.GetInstanceOf(providerType);
  63. instance = Reflect.Construct(providerType, providerArgs);
  64. providerObject = providerMethod.Invoke(instance, null);
  65. break;
  66. case MemberTypes.Field:
  67. FieldInfo providerField = member as FieldInfo;
  68. if (!providerField.IsStatic)
  69. //instance = ProviderCache.GetInstanceOf(providerType);
  70. instance = Reflect.Construct(providerType, providerArgs);
  71. providerObject = providerField.GetValue(instance);
  72. break;
  73. }
  74. return providerObject;
  75. }
  76. }
  77. }