2016-09-26 2 views
0

Можно ли отображать объекты примерно так?Передать дополнительные свойства AutoMapper Mappings

Mapper.CreateMap<Source, Dest>() 
    .ConstructUsing(s => new Dest(s.first, s.second, s.Context.Options.Items["Id"])); 

Mapper.Map<Source, Dest>(src, opt => opt.Items["Id"] = 5); 

К сожалению, нет Contex собственности в текущем лямбда ConstructUsing метода. Или, может быть, есть более элегантный способ сделать это?

Заранее благодарен!

ответ

0

Вы можете использовать:

cfg.CreateMap<Source, Dest>().ForMember(dest => dest.MyProperty, opt => opt.MapFrom(src => src.MySourceProperty)); 

Или попробовать это, если он подходит больше ваших потребностей:

cfg.CreateMap<Source, Dest>().ConvertUsing(MappingFunction); 
private Dest MappingFunction(Source source) 
{ 
    // mapping stuff 
} 

Вы также можете использовать:

cfg.CreateMap<Source, Dest>().BeforeMap(MappingFunction) 

Или:

cfg.CreateMap<Source, Dest>().AfterMap(MappingFunction) 
0

Похоже, вы используете более старую версию AutoMapper. Версия 5.x включает объект контекста, который вы можете использовать так же, как вы пытаетесь сделать.

cfg.CreateMap<Source, Dest>() 
    .ConstructUsing((src, ctxt) => new Dest(src.first, src.second, ctxt.Options.Items["Id"]));