Как мне назвать разные стратегии сопоставления для одного и того же типа в AutoMapper? - PullRequest
2 голосов
/ 11 августа 2011

У меня есть класс клиента, и я хотел бы, чтобы поле электронной почты клиента отображалось в формате CSV для просмотра списка администратора.Когда откроется окно редактирования, я хотел бы, чтобы представление показывало электронные письма в текстовом поле с разделением на новую строку.

Я не хочу, чтобы 2 разных класса для каждого представления просто использовали один и тот же,с первым, используя IEnumerable<T>, чтобы отобразить список.Мой класс довольно большой, и я не хочу иметь 2 отдельных класса представлений для управления.

Идеальной целью было бы иметь 2 разных сопоставления AutoMapper 1 для каждого отдельного сценария сопоставления, а не ограничиваться толькосозданный с помощью CreateMap на этапе начальной загрузки.Как мне этого добиться?По сути, я бы хотел изменить стратегию отображения в зависимости от того, где я нахожусь в коде.

1 Ответ

1 голос
/ 12 августа 2011

В идеале вы должны использовать две разные модели просмотра и отображать источник в нужном месте назначения. Однако, если вы не хотите идти по этому пути, можно создать модель представления, которая имеет два свойства только для чтения.

public class SomeClassViewModel
{
    public string FirstName { get; set;}

    public string LastName { get; set; }

    public string Emails { get; set; }

    public string EmailsCSV
    {
        get
        {
            var csv = Emails;
            //Do CSV transform here
            return csv;
        }
    }

    public string EmailsCRLF
    {
        get
        {
            var crlf = Emails;
            //Do crlf transform here
            return crlf;
        }
    }

}

Опять же, в идеале вы хотели бы придерживаться правила одной модели для каждого вида. Это не означает, что вы должны написать совершенно новый вид для каждой модели, всегда есть наследование.

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