Я использую AutoMapper в своем веб-сайте MVC ASP.NET для отображения моих объектов базы данных на объекты ViewModel, и я пытаюсь использовать несколько профилей для отображения тех же типов, но использую другую логику. У меня была идея сделать так путем чтения сообщения в блоге Matt, где он говорит:
Действительно ключевая роль является профилем конфигурации AutoMapper. Можно сгруппировать конфигурации с профилями. Возможно, в одном профиле Вы форматируете даты одним способом, другим профилем Вы форматируете даты в другом отношении. Я просто использую один профиль здесь.
Таким образом, я создал профиль для одного случая:
public class MyProfile : Profile
{
protected override string ProfileName
{
get
{
return "MyProfile";
}
}
protected override void Configure()
{
CreateMap().ConvertUsing();
}
}
public class StringFromDateTimeTypeConverter : ITypeConverter
{
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().ConvertUsing();
}
}
public class AnotherStringFromDateTimeTypeConverter : ITypeConverter
{
public string Convert(DateTime source)
{
return source.ToString("mm - yyyy", CultureInfo.InvariantCulture);
}
}
Однако я не могу найти перегрузку Mapper.Map<>()
метод для определения профиля. Я также взглянул на Configuration
объект без удачи.
Последний зарегистрированный профиль всегда имеет приоритет.
Существует ли способ использовать профили с этой целью?
Профили предназначены для разделения общей конфигурации, применяемой для нескольких карт типов, например форматирования. Однако карты типов по-прежнему глобальны. Лучше создать отдельные объекты Configuration и создать для каждого отдельный MappingEngine. Класс Mapper - это просто статический фасад над каждым из них с некоторым управлением жизненным циклом.