Пример #1
0
        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);
    }