private void AddClassMaps(Type sourceType, Type targetType) { if (!ClassMaps.Any(item => item.SourceType == sourceType && item.TargetType == targetType)) { ClassMap classMap = new ClassMap(sourceType, targetType); ClassMaps.Add(classMap); foreach (PropMap propMap in classMap.PropMaps.Where(x => x.IsComposite)) { if (typeof(IEnumerable).IsAssignableFrom(propMap.SourceProp.Type)) { if (propMap.SourceProp.Type.IsGenericType) { AddClassMaps(propMap.SourceProp.Type.GetGenericArguments()[0], propMap.TargetProp.Type.GetGenericArguments()[0]); } else if (propMap.SourceProp.Type.IsArray) { AddClassMaps(propMap.SourceProp.Type.GetElementType(), propMap.TargetProp.Type.GetElementType()); } } else { AddClassMaps(propMap.SourceProp.Type, propMap.TargetProp.Type); } } } }
/// <summary> /// Registers the given class map to be used when mapping a row to an object. /// </summary> /// <param name="classType">The type of the class.</param> /// <param name="classMap">The class map to use.</param> public void RegisterClassMap(Type classType, IMap classMap) { if (classType == null) { throw new ArgumentNullException(nameof(classType)); } if (classMap == null) { throw new ArgumentNullException(nameof(classMap)); } if (ClassMaps.ContainsKey(classType)) { throw new ExcelMappingException($"Class map already exists for type \"{classType.FullName}\""); } ClassMaps.Add(classType, classMap); }