Проблема с AutoMapper
Попытка автоматизировать некоторые объекты.
Исходные объекты имеют свойства с _ перед именем, целевые объекты - не имеют. Можно ли реализовать создание ОДНОЙ карты, чтобы autopper отображал все свойства _properties
для всех типов источников.
class MyMapper<TFrom, TTo>{
TTo PerformMap(TFrom fromObject){
Mapper.CreateMap<From, To>(); // ???
TTo result = Mapper.Map<From, To>(fromObject);
//result.Id.ShouldBe(value from TFrom._Id);
return result;
}
}
class From
{
public int _Id { get; set; }
public string _Name { get; set; }
}
class To
{
public int Id { get; set; }
public string Name { get; set; }
}
3 ответа
Что-то, что я недавно добавил в AutoMapper, может вам помочь - пользовательские соглашения об именах. Если вы проверите магистраль (R107), поищите INamingConvention. Прямо сейчас у меня есть два соглашения об именах (PascalCase и lower_case_underscore), но на самом деле это всего лишь вопрос выбора правильного RegEx, который поможет вам:
В настоящее время соглашения об именах являются глобальными и имеют профиль. Поскольку эта функция является новой, нет документации, кроме тестов.
Вот как я это делаю
Mapper.Initialize(cfg =>
{
cfg.RecognizeDestinationPrefixes(new []{"_"});
cfg.RecognizePrefixes(new[] { "_" });
cfg.CreateMap<To, From>().ReverseMap();
});
Для этого вы можете добавить собственное отображение для решения этого конкретного случая:
Mapper.CreateMap<From, To>()
.ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
.ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );