private static IFieldExchange CreateFieldExchange(PropertyInfo domainClassProperty, PropertyInfo infoClassProperty)
        {
            GetFieldValueDelegate domainFieldGetter = CreateGetFieldValueDelegate(domainClassProperty);
            GetFieldValueDelegate infoFieldGetter   = CreateGetFieldValueDelegate(infoClassProperty);
            SetFieldValueDelegate domainFieldSetter = CreateSetFieldValueDelegate(domainClassProperty);
            SetFieldValueDelegate infoFieldSetter   = CreateSetFieldValueDelegate(infoClassProperty);

            Type fieldType = infoClassProperty.PropertyType;

            if (fieldType.IsSubclassOf(typeof(ValueObjectInfo)))
            {
                IInfoExchange conversion = GetDomainObjectConversion(domainClassProperty.PropertyType, infoClassProperty.PropertyType);
                return(new ValueFieldExchange(domainFieldGetter, domainFieldSetter, infoFieldGetter, infoFieldSetter, conversion));
            }
            else if (fieldType.IsSubclassOf(typeof(EntityInfo)))
            {
                IInfoExchange conversion = GetDomainObjectConversion(domainClassProperty.PropertyType, infoClassProperty.PropertyType);
                return(new EntityFieldExchange(domainFieldGetter, domainFieldSetter, infoFieldGetter, infoFieldSetter, conversion));
            }
            else if (CollectionUtils.Contains <Type>(fieldType.GetInterfaces(), delegate(Type t) { return(t.Equals(typeof(IList))); }))
            {
                Type          infoElementType   = GetCollectionElementType(fieldType);
                Type          domainElementType = GetAssociatedDomainClass(infoElementType);
                IInfoExchange conversion        = GetDomainObjectConversion(domainElementType, infoElementType);

                Type typedCollectionFieldExchange = typeof(CollectionFieldExchange <>).MakeGenericType(new Type[] { infoElementType });
                return((IFieldExchange)Activator.CreateInstance(typedCollectionFieldExchange, domainFieldGetter, domainFieldSetter, infoFieldGetter, infoFieldSetter, conversion));
            }
            else
            {
                // assume it is a primitive field
                return(new ValueFieldExchange(domainFieldGetter, domainFieldSetter, infoFieldGetter, infoFieldSetter, new PrimitiveTypeInfoExchange()));
            }
        }
 public ValueFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange valueConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _valueConversion = valueConversion;
 }
Esempio n. 3
0
 public ValueFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange valueConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _valueConversion = valueConversion;
 }
Esempio n. 4
0
 public EntityFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange entityConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _entityConversion = entityConversion;
 }
 public EntityFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange entityConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _entityConversion = entityConversion;
 }
Esempio n. 6
0
 public CollectionFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange elementConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _elementConversion = elementConversion;
 }