Automapper: Как выровнять сложный объект в обычный объект

 public class Complex
{
    public A A { get; set; }
    public A B { get; set; }
}

public class A
{
    public int a1 { get; set; }
    public int a2 { get; set; }
}

public class B
{
    public int b1 { get; set; }
    public int b2 { get; set; }
}
//----------------Source Object End Here---------------------

public class Simple  <----[This Simple class has only properties of A class]
{
    public int aa1 { get; set; }
    public int aa2 { get; set; }
}
//----------------Destination Object End Here---------------------

CreateMap<A, Simple>()
    .ForMember(dest => dest.aa1, opt => opt.MapFrom(src => src.a1))
    .ForMember(dest => dest.aa2, opt => opt.MapFrom(src => src.a2))

// Mapper IS NOT AVAILABLE HERE AS I AM USING PROFILE BASED CONFIGURATION
CreateMap<Complex, Simple>()
    .ConvertUsing(src => Mapper.Map<A, Simple>(src.A)); <------Error at this line

//----------------Automammer config End Here---------------------

Как сгладить с Complex в Simple? Я не хочу наносить на карту Complex.A в Simple один за другим снова в Complex в Simple конфиг как уже настроено выше.

1 ответ

Наконец-то я разобрался с другим перегруженным методом ConvertUsing

CreateMap<Complex, Simple>()
.ConvertUsing((src,ctx) => {
     return ctx.Mapper.Map<Complex, Simple>(src.A)
}); 

Я чувствую, что этот перегруженный метод имеет множество возможностей и гибкость. У меня больше нет проблем с доступом Mapper прямо как указано в вопросе. Этот перегруженный метод имеет свой собственный параметр контекста (ResolutionContext). Мы можем использовать Mapper из этого параметра контекста, как ctx.Mapper.Map<Complex, Simple>(src.A)

Другие вопросы по тегам