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); }
/// <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); }
public ClassPropertyMap(PropertyInfo srcPropertyInfo, PropertyInfo destPropertyInfo, Type attrType) { _srcPropertyInfo = srcPropertyInfo; _destPropertyInfo = destPropertyInfo; _typeMap = TypeMap.Create(srcPropertyInfo.PropertyType, destPropertyInfo.PropertyType, attrType); }