public CustomMemberProviderNode(ObjectNode parent, object item, int maxDepth, DataContextDriver dcDriver, bool useDataContextDriver) : base(parent, item, maxDepth, dcDriver) { base.Name = item.GetType().FormatTypeName(); if (base.IsAtNestingLimit()) { base.GraphTruncated = true; } else { IEnumerable <string> names; IEnumerable <Type> types; IEnumerable <object> values; if (useDataContextDriver) { ICustomMemberProvider customDisplayMemberProvider = dcDriver.GetCustomDisplayMemberProvider(item); names = customDisplayMemberProvider.GetNames(); types = customDisplayMemberProvider.GetTypes(); values = customDisplayMemberProvider.GetValues(); } else { Type type2 = item.GetType().GetInterfaces().First <Type>(t => t.FullName == typeof(ICustomMemberProvider).FullName); MethodInfo method = type2.GetMethod("GetNames"); MethodInfo info2 = type2.GetMethod("GetTypes"); MethodInfo info3 = type2.GetMethod("GetValues"); names = (IEnumerable <string>)method.Invoke(item, null); types = (IEnumerable <Type>)info2.Invoke(item, null); values = (IEnumerable <object>)info3.Invoke(item, null); } IEnumerator <Type> enumerator = types.GetEnumerator(); enumerator.MoveNext(); IEnumerator <object> enumerator2 = values.GetEnumerator(); enumerator2.MoveNext(); foreach (string str in names) { object current; try { current = enumerator2.Current; } catch (Exception innerException) { if ((innerException is TargetInvocationException) && (innerException.InnerException != null)) { innerException = innerException.InnerException; } current = innerException; } base.Members.Add(new MemberData(str, enumerator.Current, ObjectNode.Create(this, current, maxDepth, dcDriver))); enumerator.MoveNext(); enumerator2.MoveNext(); } if ((base.Members.Count > 50) && (base.NestingDepth > 1)) { base.InitiallyHidden = true; } } }
private void AssertInfo(ICustomMemberProvider showInfo) { Assert.AreEqual(3, showInfo.GetNames().Count()); Assert.AreEqual(3, showInfo.GetTypes().Count()); Assert.AreEqual(3, showInfo.GetValues().Count()); Assert.IsTrue(new[] { "AutoProperty", "Field", "OtherField" }.SequenceEqual(showInfo.GetNames())); Assert.IsTrue(new[] { typeof(string), typeof(int), typeof(long) }.SequenceEqual(showInfo.GetTypes())); Assert.IsTrue(new object[] { null, 1, 2L }.SequenceEqual(showInfo.GetValues())); }
private void AssertInfo(ICustomMemberProvider showInfo) { Assert.AreEqual(3,showInfo.GetNames().Count()); Assert.AreEqual(3,showInfo.GetTypes().Count()); Assert.AreEqual(3,showInfo.GetValues().Count()); Assert.IsTrue(new[]{"AutoProperty","Field","OtherField"}.SequenceEqual(showInfo.GetNames())); Assert.IsTrue(new[]{typeof(string),typeof(int),typeof(long)}.SequenceEqual(showInfo.GetTypes())); Assert.IsTrue(new object[] { null,1, 2L }.SequenceEqual(showInfo.GetValues())); }