Использование профилей в Automapper для отображения одинаковых типов с другой логикой - PullRequest
35 голосов
/ 02 февраля 2010

Я использую AutoMapper на своем веб-сайте ASP.NET MVC для сопоставления объектов моей базы данных с объектами ViewModel, и я пытаюсь использовать несколько профилей для сопоставления одних и тех же типов, но с другой логикой. У меня была идея сделать это, прочитав пост в блоге Мэтта , где он говорит:

Действительно ключевой частью является профиль конфигурации AutoMapper. Вы можете группировать конфигурации с профилями. Возможно, в одном профиле вы форматируете даты одним способом, в другом профиле вы форматируете даты другим способом. Я просто использую один профиль здесь.

Итак, я создал профиль для одного дела:

public class MyProfile : Profile
{
    protected override string ProfileName
    {
        get
        {
            return "MyProfile";
        }
    }

    protected override void Configure()
    {
        CreateMap<DateTime, String>().ConvertUsing<StringFromDateTimeTypeConverter>();
    }
}

public class StringFromDateTimeTypeConverter : ITypeConverter<DateTime, String>
{
    public string Convert(DateTime source)
    {
        return source.ToString("dd/mm/yyyy", CultureInfo.InvariantCulture);
    }
}

И еще один для другого случая:

public class MyProfile2 : Profile
{
    protected override string ProfileName
    {
        get
        {
            return "MyProfile2";
        }
    }

    protected override void Configure()
    {
        CreateMap<DateTime, String>().ConvertUsing<AnotherStringFromDateTimeTypeConverter>();
    }
}

public class AnotherStringFromDateTimeTypeConverter : ITypeConverter<DateTime, String>
{
    public string Convert(DateTime source)
    {
        return source.ToString("mm - yyyy", CultureInfo.InvariantCulture);
    }
}

Однако я не могу найти никакой перегрузки метода Mapper.Map<>() для указания профиля. Я также посмотрел на Configuration объект без удачи.
Последний зарегистрированный профиль всегда имеет приоритет.

Есть ли способ использовать профили для этой цели?

1 Ответ

40 голосов
/ 04 февраля 2010

Профили предназначены для разделения общей конфигурации, применяемой к нескольким типам карт, например форматированию. Однако карты типов по-прежнему глобальны. Вам лучше создать отдельные объекты конфигурации и создать отдельный MappingEngine для каждого. Класс Mapper - это просто статический фасад каждого из них с некоторым управлением жизненным циклом.

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