2011-06-29 108 views
4

假設我在'Message'類上有'Comment'屬性。我也有2個具有'Body'屬性的類屬性。如果該類有任何類屬性設置,我希望AutoMapper將Body屬性投影到模型的註釋屬性中,否則使用消息類的普通註釋屬性。使用AutoMapper的條件投影

例如

public class Message 
{ 
    public string Comment { get; set; } 
    public Inbound? InboundMessage { get; set; } 
    public Outbound? OutboundMessage { get; set; } 
} 

public class Inbound 
{ 
    public string Body { get; set; } 
} 

public class Outbound 
{ 
    public string Body { get; set; } 
} 


public class MessageModel 
{ 
    public string Comment { get; set; } 
} 

我在處理這個問題的文檔中沒有看到任何東西。

回答

5

使用ValueResolver:

.ForMember(dto => dto.Comment, opt => opt.ResolveUsing<CommentResolver>().FromMember(src => src)) 

然後實際執行:

public class CommentResolver: ValueResolver<Message, string> 
{ 
    protected override string ResolveCore(Message msg) 
    { 
     //logic goes here 
     if (msg.InboundMessage != null) 
     return msg.InboundMessage.Body; 
     else if (msg.OutboundMessage != null) 
     return msg.OutboundMessage.Body; 
     else 
     return msg.Comment; 

    } 
}