Используйте Automapper в ITypeConverter
Я обновляю AutoMapper в проекте, преобразовывая из статического Mapper.CreateMap
на новый путь и вводя IMapper
где мне нужно на карту.
Это идет отлично, за исключением одного варианта использования. У меня есть несколько ITypeConverter
s для сложного картирования, которые используют Mapper.Map
функция. Как я могу это исправить? Ниже приведен код, который я использую в данный момент.
Статический Mapper.Map
не могу найти мои определенные сопоставления, потому что они не создаются статическим методом.
public partial class ApplicationMappingsProfile
{
private void RegisterMappings()
{
CreateMap<Application, AppDto>()
.ConvertUsing<ApplicationTypeConverter>();
}
}
private class ApplicationTypeConverter : ITypeConverter<App, AppDto>
{
public AppDto Convert(ResolutionContext context)
{
var src = context.SourceValue as App;
if (src == null)
{
return null;
}
var dto = Mapper.Map<App, AppDto>(src);
dto.property = Mapper.Map<Property>(src.SomeProperty);
return result;
}
}
1 ответ
Решение
ResolutionContext
содержит ссылку на текущий движок Mapping. Переключите Mapper.Map
с context.Engine.Mapper.Map
и ты в порядке.
public partial class ApplicationMappingsProfile
{
private void RegisterMappings()
{
CreateMap<Application, AppDto>()
.ConvertUsing<ApplicationTypeConverter>();
}
}
private class ApplicationTypeConverter : ITypeConverter<App, AppDto>
{
public AppDto Convert(ResolutionContext context)
{
var src = context.SourceValue as App;
if (src == null)
{
return null;
}
var dto = Mapper.Map<App, AppDto>(src);
dto.property = context.Engine.Mapper.Map.Map<Property>(src.SomeProperty);
return result;
}
}