public MappingMemberPath(List <MemberInfo> source, List <MemberInfo> target, TypePair typePair) { Source = source; OneLevelSource = source.Count == 1; OneLevelTarget = target.Count == 1; Target = target; TypePair = typePair; Tail = new MappingMember(source[source.Count - 1], target[target.Count - 1], typePair); Head = new MappingMember(source[0], target[0], new TypePair(source[0].GetMemberType(), target[0].GetMemberType())); }
private static IEmitterType StoreTargetObjectMember(MappingMember member, IEmitterType targetObject, IEmitterType convertedMember) { IEmitterType result = null; member.Target .ToOption() .Match(x => x.IsField(), x => result = StoreFiled((FieldInfo)x, targetObject, convertedMember)) .Match(x => x.IsProperty(), x => result = StoreProperty((PropertyInfo)x, targetObject, convertedMember)); return(result); }
private IEmitterType ConvertMember(TypePair parentTypePair, MappingMember member, IEmitterType sourceMemeber, IEmitterType targetMember) { // if (member.TypePair.IsDeepCloneable && _config.GetBindingConfig(parentTypePair).HasNoValue) if (member.TypePair.IsDeepCloneable) { return(sourceMemeber); } var mapperCacheItem = CreateMapperCacheItem(parentTypePair, member); var result = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember); return(result); }
private MapperCacheItem CreateMapperCacheItem(TypePair parentTypePair, MappingMember mappingMember) { var mapperCacheItemOption = _mapperCache.Get(mappingMember.TypePair); if (mapperCacheItemOption.HasValue) { return(mapperCacheItemOption.Value); } var mapperBuilder = _config.GetMapperBuilder(parentTypePair, mappingMember); var mapper = mapperBuilder.Build(parentTypePair, mappingMember); var mapperCacheItem = _mapperCache.Add(mappingMember.TypePair, mapper); return(mapperCacheItem); }