2014-04-21 2 views
1

Как преобразовать объект запроса в объект IRequest с помощью automapper?Convert object with automapper

Этот пример не работает. В новом объекте IRequest все свойства равно нулю:

Mapper.CreateMap<Request, IRequest>(); 
Mapper.CreateMap<RequestInfo, RequestInfo>(); 
Mapper.CreateMap<ClientInfo, ClientInfo>(); 


public class Request { 

    public RequestInfo requestInfo { get; set; }   

    public ClientInfo clientInfo { get; set; } 

    public DocumentInfo documentInfo { get; set; } 

} 

public interface IRequest { 

    RequestInfo RequestInfo { get; set; }   

    ClientInfo ClientInfo { get; set; } 

    DocumentInfo DocumentInfo { get; set; } 

} 
+0

Итак, что именно не работает? – gleng

+0

Вы не показываете, где вы на самом деле пытаетесь перейти к целевому объекту. –

+0

Вам следует избегать префикса класса с буквой I, поскольку он обычно используется для интерфейсов. – thepirat000

ответ

4

Automapper карты по имени свойства, а не по имени типа. Поскольку свойства в ваших двух классов имеют разные названия из-за корпуса, вам необходимо явно определить отображение:

Mapper.CreateMap<Request, IRequest>() 
     .ForMember(d => d.RequestInfo , m => m.MapFrom(s => s.requestInfo)) 
     .ForMember(d => d.ClientInfo , m => m.MapFrom(s => s.clientInfo )) 
     .ForMember(d => d.DocumentInfo, m => m.MapFrom(s => s.documentInfo)) 

Или вы могли бы просто переименовать свойства в Request быть последовательным.

В качестве боковой заметки, я бы не использование IRequest как класс name. Типы, которые начинаются с I, почти повсеместно предполагаются интерфейсами, а не классами.

+0

У меня есть отображение от класса к интерфейсу – zrabzdn

+0

@zrabzdn - это другой вопрос? –

+0

@ D Стэнли, да – zrabzdn