예제 #1
0
        public ArrayPropertyMap(PropertyInfo srcPropertyInfo, PropertyInfo destPropertyInfo, Type attrType)
        {
            _srcPropertyInfo  = srcPropertyInfo;
            _destPropertyInfo = destPropertyInfo;


            var srcElementType  = ReflectionUtils.GetElementType(srcPropertyInfo.PropertyType);
            var destElementType = ReflectionUtils.GetElementType(destPropertyInfo.PropertyType);

            var isSimpleType  = ReflectionUtils.IsSimpleType(srcElementType);
            var areInterfaces = IsInterfaces(srcElementType, destElementType);

            if (isSimpleType || areInterfaces)
            {
                // если тип простой, просто проверим чтобы они были одинаковые - иначе ничего может не получиться в рантайме
                if (!areInterfaces && srcElementType != destElementType)
                {
                    throw new Exception("There are different simple element types for mapping Lists. ElementSrc=[" + srcElementType + "]. ElementDest=[" + destElementType + "]. Theyshould be the same");
                }
            }
            else
            {
                _elementTypeMap = TypeMap.Create(srcElementType, destElementType, attrType);
            }

            _destArrayConstructor = ArrayConstructorBase.Create(destPropertyInfo.PropertyType);
        }
예제 #2
0
        /// <summary>
        /// Регистрируем типы, которые необходимо связать между собой.
        /// Для типа получателя необходимо указать аттрибуты у свойств, которые должны получить данные
        /// </summary>
        /// <param name="typeSrc">тип источник источник</param>
        /// <param name="typeDest">тип получатель информации</param>
        /// <param name="attrDest">тип аттрубута, которым помечается свойства в классе получателе</param>
        public void Register(Type typeSrc, Type typeDest, Type attrDest)
        {
            var newMap = TypeMap.Create(typeSrc, typeDest, attrDest);

            lock (_lock)
                _maps.Add(typeSrc, newMap);
        }
예제 #3
0
 public ClassPropertyMap(PropertyInfo srcPropertyInfo, PropertyInfo destPropertyInfo, Type attrType)
 {
     _srcPropertyInfo  = srcPropertyInfo;
     _destPropertyInfo = destPropertyInfo;
     _typeMap          = TypeMap.Create(srcPropertyInfo.PropertyType, destPropertyInfo.PropertyType, attrType);
 }