Automapper(5.1.1)ForAllMembers - 获取当前属性的名称

时间:2016-09-09 12:48:07

标签: c# automapper-5

这是我的问题,在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);
    }
}

1 个答案:

答案 0 :(得分:3)

尝试以下方法:

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;
            }));