Используйте Automapper в ITypeConverter

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

Это идет отлично, за исключением одного варианта использования. У меня есть несколько ITypeConverters для сложного картирования, которые используют 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;
    }
}
Другие вопросы по тегам