Automapper: Как выровнять сложный объект в обычный объект - PullRequest
0 голосов
/ 24 января 2019
 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 Ответ

0 голосов
/ 25 января 2019

Наконец, я разобрался с другим перегруженным методом 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)

...