private IAstNode ProcessDestSrcReadOperation( DestSrcReadOperation operation, int operationId) { IAstRefOrValue src = AstBuildHelper.ReadMembersChain( AstBuildHelper.ReadLocalRA(locFrom), operation.Source.MembersChain ); IAstRefOrValue dst = AstBuildHelper.ReadMembersChain( AstBuildHelper.ReadLocalRA(locFrom), operation.Destination.MembersChain ); return(AstBuildHelper.CallMethod( typeof(ValueProcessor).GetMethod("Invoke"), new AstCastclassRef( (IAstRef)AstBuildHelper.ReadMemberRV( GetStoredObject(operationId, typeof(DestSrcReadOperation)), typeof(DestWriteOperation).GetProperty("ValueProcessor") ), operation.ValueProcessor.GetType() ), new List <IAstStackItem> { src, dst, AstBuildHelper.ReadLocalRV(locState) } )); }
public void TestDestSrcReadOperation() { var message2 = new ReadWriteSimple { Source = new MemberDescriptor( new[] { typeof(FromClass).GetMember(nameof(FromClass.Inner))[0], typeof(FromClass.InnerClass).GetMember(nameof(FromClass.InnerClass.GetMessage2))[0] }), Destination = new MemberDescriptor( new[] { typeof(ToClass).GetMember(nameof(ToClass.Message2))[0] }) }; var message = new DestSrcReadOperation { ValueProcessor = (f, t, o) => { _testOutputHelper.WriteLine(f?.ToString()); _testOutputHelper.WriteLine(t?.ToString()); // _testOutputHelper.WriteLine(o?.ToString()); // var source = f as FromClass; // var dest = t as ToClass; // dest.Message = source.Inner.Message; }, Source = new MemberDescriptor( new[] { typeof(FromClass).GetMember(nameof(FromClass.Inner))[0], typeof(FromClass.InnerClass).GetMember(nameof(FromClass.Inner.Message))[0] }), Destination = new MemberDescriptor( new[] { typeof(ToClass).GetMember(nameof(ToClass.Message))[0] }) }; var mapper = Mapper.Default.GetMapper <FromClass, ToClass>( new CustomMapConfig { GetMappingOperationFunc = (from, to) => new IMappingOperation[] { message, message2 } }); var b = new FromClass(); var a = mapper.Map(b); // b.Inner.Message.ShouldBe(a.Message); // b.Inner.GetMessage2().ShouldBe(a.Message2); }