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)