Подтвердить что ты не робот

Использование профилей в Automapper для сопоставления одних и тех же типов с другой логикой

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

На самом деле ключевой частью является профиль конфигурации 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 без везения.
Последний зарегистрированный профиль всегда имеет приоритет.

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

4b9b3361

Ответ 1

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