2015-07-13 124 views
2

我使用Automapper來定義一些對象之間的映射配置。我需要根據配置檢索目標的單個映射值。用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

這只是一個例子,我的實際對象更加複雜,我需要使用映射配置從源對象獲取值的一般方法。我不需要目標對象,只需要字段值。 –

回答

0

首先創建一個resolver,然後在映射器調用中使用解析使用方法。

public class PersonNameResolver : ValueResolver<Person, PersonDTO> 
{ 
    protected override PersonDTO ResolveCore(Person source) 
    { 
     return new PersonDTO 
     { 
      FirstName = source.FirstName, 
      LastName = source.LastName 
     }; 
    } 
} 

創建完成後,在mapper調用中使用以下內容。

Mapper.CreateMap<Person, PersonDTO>() 
    .ForMember(
     dest => dest.Name, 
     opts => opts.ResolveUsing<PersonNameResolver>().FromMember(o => o)) 
+0

如果我添加其他字段,這不會阻止它們映射... –

+0

這應該只映射在兩者之間定義的項目。你能澄清一點嗎?如果您將其他字段添加到PersonDTO,則不應使用PersonNameResolver進行映射。 – Jerode