AutoMapper和"UseDestinationValue"

Vac*_*ano 6 automapper

UseDestinationValue有什么作用?

我问,因为我有一个基类和继承类,对于基类,我很想让AutoMapper为我获取现有值.

它会那样做吗?(我看过并且我可以看到UseDestinationValue涉及列表的唯一示例.它仅用于列表吗?

我可以这样做:

PersonContract personContract = new PersonContract {Name = 'Dan'};
Person person = new Person {Name = "Bob"};
Mapper.CreateMap<PersonContract, Person>()
      .ForMember(x=>x.Name, opt=>opt.UseDestinationValue());

person = Mapper.Map<PersonContract, Person>(personContract);

Console.WriteLine(person.Name);
Run Code Online (Sandbox Code Playgroud)

输出是bob?

Vac*_*ano 3

我写下了整个问题然后想,DUH!运行一下看看。

它如我所希望的那样工作。

这是我最终得到的代码:

class Program
{
    static void Main(string[] args)
    {
        PersonContract personContract = new PersonContract {NickName = "Dan"};
        Person person = new Person {Name = "Robert", NickName = "Bob"};
        Mapper.CreateMap<PersonContract, Person>()
            .ForMember(x => x.Name, opt =>
                                        {
                                            opt.UseDestinationValue();
                                            opt.Ignore();
                                        });

        Mapper.AssertConfigurationIsValid();

        var personOut = 
            Mapper.Map<PersonContract, Person>(personContract, person);

        Console.WriteLine(person.Name);
        Console.WriteLine(person.NickName);

        Console.WriteLine(personOut.Name);
        Console.WriteLine(personOut.NickName);
        Console.ReadLine();
    }
}

internal class Person
{
    public string Name { get; set; }
    public string NickName { get; set; }
}

internal class PersonContract
{
    public string NickName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

罗伯特
·丹
罗伯特
·丹

  • 这与仅使用 Ignore() 相同。 (6认同)