Условная проекция с использованием AutoMapper - PullRequest
4 голосов
/ 29 июня 2011

Скажем, у меня есть свойство "Комментарий" в классе "Сообщение".У меня также есть 2 свойства класса, которые имеют свойство «Body».Если для класса установлено любое из свойств класса, я хочу, чтобы AutoMapper проецировал свойство Body в свойство комментария модели, в противном случае используйте обычное свойство комментария для класса сообщений.

например

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; }
}

Я не видел ничего в документации, которая бы справлялась с этим.

1 Ответ

5 голосов
/ 30 июня 2011

Использование 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;

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...