2

这是我的问题,Condition我想获取正在评估的当前属性的名称。我相信你可以在早期版本的 Automapper 中做到这一点。有什么建议么?

[TestFixture]
public class SandBox
{
    public class MySource
    {
        public string Name { get; set; }
        public int Count { get; set; }
    }

    public class MyDestination
    {
        public string Name { get; set; }
        public int Count { get; set; }
    }

    public class SourceProfile : Profile
    {
        public SourceProfile()
        {
            this.CreateMap<MySource, MyDestination>()
                .ForAllMembers(x => x.Condition((source, destination, arg3, arg4, resolutionContext) =>
                {
                    // this will run twice (once for every property)
                    // but how can I find out, what the current property is?

                    return true;
                }));
        }
    }

    public SandBox()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile(new SourceProfile());
        });
    }

    [Test]
    public void Run()
    {
        var s = new MySource { Name = "X", Count = 42 };
        var r = Mapper.Map<MyDestination>(s);
        Assert.AreEqual(s.Name, r.Name);
    }
}
4

1 回答 1

6

尝试以下操作:

this.CreateMap<MySource, MyDestination>()
            .ForAllMembers(x => x.Condition((source, destination, arg3, arg4, resolutionContext) =>
            {
                // this will run twice (once for every property)
                // but how can I find out, what the current property is?

                Debug.WriteLine($"Mapping to {destination.GetType().Name}.{x.DestinationMember.Name}");

                return true;
            }));
于 2017-01-12T08:44:05.730 回答