コード例 #1
0
        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()));
            }
        }
コード例 #2
0
 public ValueFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange valueConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _valueConversion = valueConversion;
 }
コード例 #3
0
ファイル: ValueFieldExchange.cs プロジェクト: nhannd/Xian
 public ValueFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange valueConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _valueConversion = valueConversion;
 }
コード例 #4
0
ファイル: EntityFieldExchange.cs プロジェクト: nhannd/Xian
 public EntityFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange entityConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _entityConversion = entityConversion;
 }
コード例 #5
0
 public EntityFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange entityConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _entityConversion = entityConversion;
 }
コード例 #6
0
 public CollectionFieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter,
     IInfoExchange elementConversion)
     : base(classFieldGetter, classFieldSetter, infoFieldGetter, infoFieldSetter)
 {
     _elementConversion = elementConversion;
 }
コード例 #7
0
ファイル: FieldExchange.cs プロジェクト: nhannd/Xian
 public FieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter)
 {
     _classFieldGetter = classFieldGetter;
     _classFieldSetter = classFieldSetter;
     _infoFieldGetter = infoFieldGetter;
     _infoFieldSetter = infoFieldSetter;
 }
コード例 #8
0
 public FieldExchange(
     GetFieldValueDelegate classFieldGetter,
     SetFieldValueDelegate classFieldSetter,
     GetFieldValueDelegate infoFieldGetter,
     SetFieldValueDelegate infoFieldSetter)
 {
     _classFieldGetter = classFieldGetter;
     _classFieldSetter = classFieldSetter;
     _infoFieldGetter  = infoFieldGetter;
     _infoFieldSetter  = infoFieldSetter;
 }
コード例 #9
0
 public void InitializeForAutoGeneration(GetFieldValueDelegate getFieldValueMethod) => this.GetFieldValueMethod = getFieldValueMethod;