private MapperCacheItem CreateMapperCacheItem(TypePair typePair) { MapperBuilder mapperBuilder = GetMapperBuilder(typePair); Mapper mapper = mapperBuilder.Build(typePair); MapperCacheItem mapperCacheItem = _mapperCache.Add(typePair, mapper); return(mapperCacheItem); }
private MapperCacheItem CreateMapperCacheItem(TypePair parentTypePair, MappingMember mappingMember) { MapperBuilder mapperBuilder = _config.GetMapperBuilder(parentTypePair, mappingMember); Mapper mapper = mapperBuilder.Build(parentTypePair, mappingMember); MapperCacheItem mapperCacheItem = _mapperCache.Add(mappingMember.TypePair, mapper); return(mapperCacheItem); }
private void EmitConvertItem(TypeBuilder typeBuilder, TypePair typePair, string methodName = ConvertItemMethod) { MapperCacheItem mapperCacheItem = CreateMapperCacheItem(typePair); MethodBuilder methodBuilder = typeBuilder.DefineMethod(methodName, OverrideProtected, typeof(object), new[] { typeof(object) }); IEmitterType sourceMemeber = EmitArgument.Load(typeof(object), 1); IEmitterType targetMember = EmitNull.Load(); IEmitterType callMapMethod = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember); EmitReturn.Return(callMapMethod).Emit(new CodeGenerator(methodBuilder.GetILGenerator())); }
private IEmitterType ConvertMember(MappingMember member, IEmitterType sourceMemeber, IEmitterType targetMember) { if (member.TypePair.IsDeepCloneable) { return(sourceMemeber); } MapperCacheItem mapperCacheItem = CreateMapperCacheItem(member.TypePair); IEmitterType result = mapperCacheItem.EmitMapMethod(sourceMemeber, targetMember); 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); } MapperCacheItem mapperCacheItem = CreateMapperCacheItem(parentTypePair, member); IEmitterType 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); } MapperBuilder mapperBuilder = _config.GetMapperBuilder(parentTypePair, mappingMember); Mapper mapper = mapperBuilder.Build(parentTypePair, mappingMember); MapperCacheItem mapperCacheItem = _mapperCache.Add(mappingMember.TypePair, mapper); return(mapperCacheItem); }
private MapperCacheItem CreateMapperCacheItem(TypePair typePair) { var mapperCacheItemOption = _mapperCache.Get(typePair); if (mapperCacheItemOption.HasValue) { return(mapperCacheItemOption.Value); } MapperBuilder mapperBuilder = GetMapperBuilder(typePair); Mapper mapper = mapperBuilder.Build(typePair); MapperCacheItem mapperCacheItem = _mapperCache.Add(typePair, mapper); return(mapperCacheItem); }
protected override Mapper BuildCore(TypePair typePair) { Type parentType = typeof(ClassMapper <,>).MakeGenericType(typePair.Source, typePair.Target); TypeBuilder typeBuilder = _assembly.DefineType(GetMapperFullName(), parentType); EmitCreateTargetInstance(typePair.Target, typeBuilder); MapperCacheItem rootMapperCacheItem = _mapperCache.AddStub(typePair); Option <MapperCache> mappers = EmitMapClass(typePair, typeBuilder); var rootMapper = (Mapper)Activator.CreateInstance(Helpers.CreateType(typeBuilder)); UpdateMappers(mappers, rootMapperCacheItem.Id, rootMapper); _mapperCache.ReplaceStub(typePair, rootMapper); mappers.Do(x => rootMapper.AddMappers(x.Mappers)); return(rootMapper); }