private Relation(PropertyInfo member) { _member = member; var undertype = member.PropertyType.GetInterfaces() .FirstOrDefault(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEnumerable <>)) ?.GetGenericArguments() .FirstOrDefault(); if (undertype != null) { SlotType = undertype; IsCollection = true; _setter = CreateSetter(member, undertype); } else { SlotType = member.PropertyType; IsCollection = false; var accessor = TypeAccessor.Get(member.DeclaringType); _setter = (self, value) => accessor[self, member] = value.SingleOrDefault(); } }
public void GetWithNonPublic() { TypeClassifiedMembers classifiedMembers = TypeClassifiedMembers.GetForPublicValueTypeTestObject(); ImmediateType immediateType = TypeAccessor.Get <PublicValueTypeTestClass>(true); CheckPublicAndNonPublicInstanceMembers(immediateType); immediateType = TypeAccessor.Get(typeof(PublicValueTypeTestClass), true); CheckPublicAndNonPublicInstanceMembers(immediateType); #region Local functions void CheckPublicAndNonPublicInstanceMembers(ImmediateType type) { Assert.IsNotNull(type); Assert.AreEqual(typeof(PublicValueTypeTestClass), type.Type); // Public & Non Public instance members CollectionAssert.AreEquivalent( classifiedMembers.AllFields, immediateType.Fields.Select(field => field.FieldInfo)); CollectionAssert.AreEquivalent( classifiedMembers.PublicInstanceProperties.Concat(classifiedMembers.NonPublicInstanceProperties).Concat(classifiedMembers.StaticProperties), immediateType.Properties.Select(property => property.PropertyInfo)); } #endregion }
public void GetWithFlags() { TypeClassifiedMembers classifiedMembers = TypeClassifiedMembers.GetForPublicValueTypeTestObject(); const BindingFlags flags = BindingFlags.Public | BindingFlags.Static; ImmediateType immediateType = TypeAccessor.Get <PublicValueTypeTestClass>(flags); CheckStaticInstanceMembers(immediateType); immediateType = TypeAccessor.Get(typeof(PublicValueTypeTestClass), flags); CheckStaticInstanceMembers(immediateType); #region Local functions void CheckStaticInstanceMembers(ImmediateType type) { Assert.IsNotNull(type); Assert.AreEqual(typeof(PublicValueTypeTestClass), type.Type); // Static members CollectionAssert.AreEqual( classifiedMembers.StaticFields.Concat(classifiedMembers.ConstFields), immediateType.Fields.Select(field => field.FieldInfo)); CollectionAssert.AreEquivalent( classifiedMembers.StaticProperties, immediateType.Properties.Select(property => property.PropertyInfo)); } #endregion }
public void Get_NullType() { // ReSharper disable AssignNullToNotNullAttribute // ReSharper disable ReturnValueOfPureMethodIsNotUsed Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null)); Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null, false)); Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null, true)); Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null, BindingFlags.Public | BindingFlags.Instance)); // ReSharper disable ReturnValueOfPureMethodIsNotUsed // ReSharper restore AssignNullToNotNullAttribute }
public void GetCached() { ImmediateType immediateType1 = TypeAccessor.Get(typeof(PublicValueTypeTestClass)); Assert.IsNotNull(immediateType1); ImmediateType immediateType2 = TypeAccessor.Get <PublicValueTypeTestClass>(); Assert.IsNotNull(immediateType2); Assert.AreSame(immediateType1, immediateType2); }
public static object GetValue(MemberInfo member, object owner) { var accessor = TypeAccessor.Get(member.DeclaringType); switch (member) { case FieldInfo fi: return(accessor[owner, fi]); case PropertyInfo pi: return(accessor[owner, pi]); default: throw PtixedException.InvalidExpression(member); } }
public void Setup() { this.settingsAccessor = TypeAccessor.Get <AnalysisSettings>(includeNonPublicMembers: true); }
public void Setup() { this.outputDirectory = PathHelper.GetTempDir(); this.settingsAccessor = TypeAccessor.Get <AnalysisSettings>(includeNonPublicMembers: true); }