/// <summary> /// Add simple or complex item that maps source member to destination member. /// </summary> /// <typeparam name="TSourceMember"></typeparam> /// <typeparam name="TDestinationMember"></typeparam> /// <param name="source">The source<see cref="TSourceMember"/></param> /// <param name="destination">The destination<see cref="TDestinationMember"/></param> /// <param name="complex">The complex<see cref="bool"/></param> /// <returns>The <see cref="SimpleMapper"/></returns> private SimpleMapper AddItem <TSourceMember, TDestinationMember>(TSourceMember source, TDestinationMember destination, bool complex) where TSourceMember : MemberInfo where TDestinationMember : MemberInfo { if (source == null) { throw new ArgumentNullException(nameof(source)); } if (destination == null) { throw new ArgumentNullException(nameof(destination)); } var sourceItem = new MappedItem.Item(source, true); var destinationItem = new MappedItem.Item(destination, false); MappedItem mapping = new MappedItem(sourceItem, destinationItem, this); this.items.Add(mapping); if (complex) { SimpleMapper subMap = MapResolver.Resolve(sourceItem.Type, destinationItem.Type); mapping.IsComplex = true; subMaps.Add(mapping.Key, subMap); } return(this); }
/// <summary> /// Maps source object to destination object. /// </summary> /// <param name="source">The source<see cref="object"/></param> /// <param name="destination">The destination<see cref="object"/></param> /// <param name="sourceType">The sourceType<see cref="Type"/></param> /// <param name="destinationType">The destinationType<see cref="Type"/></param> private static void Map(object source, object destination, Type sourceType, Type destinationType) { //// get new or previously resolved map SimpleMapper map = MapResolver.Resolve(sourceType, destinationType); //// map source to destination Map(map, source, destination, sourceType, destinationType); }
/// <summary> /// Add simple or complex item that maps source member to destination member. /// </summary> /// <param name="sourceMemberName">The sourceMemberName<see cref="string"/></param> /// <param name="sourceType">The sourceType<see cref="Type"/></param> /// <param name="destinationMemberName">The destinationMemberName<see cref="string"/></param> /// <param name="destinationType">The destinationType<see cref="Type"/></param> /// <param name="complex">The complex<see cref="bool"/></param> /// <returns>The <see cref="SimpleMapper"/></returns> private SimpleMapper AddItem(string sourceMemberName, Type sourceType, string destinationMemberName, Type destinationType, bool complex) { if (string.IsNullOrWhiteSpace(sourceMemberName)) { throw new ArgumentNullException(nameof(sourceMemberName)); } if (string.IsNullOrWhiteSpace(destinationMemberName)) { throw new ArgumentNullException(nameof(destinationMemberName)); } if (sourceType == null) { throw new ArgumentNullException(nameof(sourceType)); } if (destinationType == null) { throw new ArgumentNullException(nameof(destinationType)); } MemberInfo sm = sourceType.GetMember(sourceMemberName).FirstOrDefault(); MemberInfo dm = destinationType.GetMember(destinationMemberName).FirstOrDefault(); MappedItem.Item sourceItem = null; MappedItem.Item destinationItem = null; MappedItem mapping = null; if (sm != null && dm != null) { sourceItem = new MappedItem.Item(sm, true); destinationItem = new MappedItem.Item(dm, false); mapping = new MappedItem(sourceItem, destinationItem, this); this.items.Add(mapping); } if (mapping != null) { if (complex) { SimpleMapper subMap = MapResolver.Resolve(sourceItem.Type, destinationItem.Type); mapping.IsComplex = true; subMaps.Add(mapping.Key, subMap); } } return(this); }
/// <summary> /// Resolves <see cref="ISimpleMapper"/> between source and destination type. /// </summary> /// <param name="sourceType">The sourceType<see cref="Type"/></param> /// <param name="destinationType">The destinationType<see cref="Type"/></param> /// <param name="options">The options<see cref="MapResolveOptions"/></param> /// <returns>A resolved map.</returns> public static ISimpleMapper Resolve(Type sourceType, Type destinationType, MapResolveOptions options = MapResolveOptions.None) { return(MapResolver.Resolve(sourceType, destinationType, options)); }
/// <summary> /// Resolves <see cref="ISimpleMapper"/> between source and destination type. /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TDestination"></typeparam> /// <param name="options">The options<see cref="MapResolveOptions"/></param> /// <returns>A resolved map.</returns> public static ISimpleMapper Resolve <TSource, TDestination>(MapResolveOptions options = MapResolveOptions.None) where TDestination : new() { return(MapResolver.Resolve <TSource, TDestination>(options)); }
/// <summary> /// Removes map between source and destination type. /// </summary> /// <param name="sourceType">The sourceType<see cref="Type"/></param> /// <param name="destinationType">The destinationType<see cref="Type"/></param> /// <returns>true if map was removed; false otherwise.</returns> public static bool RemoveMap(Type sourceType, Type destinationType) { return(MapResolver.Remove(sourceType, destinationType)); }
/// <summary> /// Removes map between source and destination type. /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TDestination"></typeparam> /// <returns>true if map was removed; false otherwise.</returns> public static bool RemoveMap <TSource, TDestination>() where TDestination : new() { return(MapResolver.Remove <TSource, TDestination>()); }