我使用Automapper定义某些对象之间的映射配置。我需要根据配置检索目标的单个映射值。
我们说我有一个域对象
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
和相应的DTO
class PersonDTO
{
public string FullName { get; set; }
}
和映射
Mapper.CreateMap<Person, PersonDTO>()
.ForMember(
dest => dest.FullName,
opts => opts.MapFrom(src => src.FirstName + " " + src.LastName));
我喜欢像Mapper.MapField<PersonDTO>(person, x => x.FullName)
这样的方法,它只返回一个映射值(将在完整映射中分配给指定的字段)。有没有办法在没有映射整个对象并从结果中提取值的情况下做到这一点?
答案 0 :(得分:0)
首先创建一个resolver,然后在mapper调用中使用resolve using方法。
public class PersonNameResolver : ValueResolver<Person, PersonDTO>
{
protected override PersonDTO ResolveCore(Person source)
{
return new PersonDTO
{
FirstName = source.FirstName,
LastName = source.LastName
};
}
}
创建完成后,请在映射器调用中使用以下内容。
Mapper.CreateMap<Person, PersonDTO>()
.ForMember(
dest => dest.Name,
opts => opts.ResolveUsing<PersonNameResolver>().FromMember(o => o))