public ClassObjectProxyProperty(Type t, object o, ClassPropertyBag <ObjectContainerProxy> bag) : base(t.Name, null, null) { _wrappedObject = o; _bag = bag; ComponentType = t; }
public ClassObjectProxyProperty(Type t, object o, HashSet <Type> primitiveTypes) : base(t.Name, null, null) { _wrappedObject = o; _bag = ClassPropertyBagFactory.GetPropertyBagForObject(o, primitiveTypes); ComponentType = t; }
public StructObjectProxyProperty(Type t, object o, HashSet <Type> primitiveTypes) : base("Shared Component", null, null) { _wrappedObject = o; _bag = new ClassPropertyBag <ObjectContainerProxy>( new ClassObjectProxyProperty(o.GetType(), o, primitiveTypes)); ComponentType = t; }
public static ClassPropertyBag <ObjectContainerProxy> GetPropertyBagForObject( object o, HashSet <Type> primitiveTypes) { Type type = o.GetType(); if (_propertyBagCache.ContainsKey(type)) { return(_propertyBagCache[type]); } var bag = new ClassPropertyBag <ObjectContainerProxy>(); bag.AddProperty(new TypeIdClassProperty((ObjectContainerProxy c) => c.o.GetType().Name)); foreach (var f in type.GetFields(BindingFlags.Public | BindingFlags.Instance)) { try { object value = f.GetValue(o); if (value == null) { continue; } if (IsPrimitiveValue(primitiveTypes, f.FieldType)) { var objectProperty = typeof(FieldObjectProperty <>).MakeGenericType(f.FieldType); bag.AddProperty((IClassProperty <ObjectContainerProxy>)Activator.CreateInstance(objectProperty, o, f)); } // TODO: only class type for now else if (f.FieldType.IsClass) { if (f.FieldType.Name != type.Name) { bag.AddProperty(new ClassObjectProxyProperty(f.FieldType, value, primitiveTypes)); } } } catch (Exception) { } } foreach (var f in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { try { if (IsPrimitiveValue(primitiveTypes, f.PropertyType)) { var objectProperty = typeof(CSharpPropertyObjectProperty <>).MakeGenericType(f.PropertyType); bag.AddProperty((IClassProperty <ObjectContainerProxy>)Activator.CreateInstance(objectProperty, o, f)); } // TODO: only class type for now } catch (Exception) { } } _propertyBagCache[type] = bag; return(bag); }