将其他属性传递给AutoMapper Mappings

时间:2016-09-26 11:52:30

标签: c# mapping automapper

是否可以映射这样的对象?

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方法的当前lambda中没有ConstructUsing属性。或者也许有更优雅的方式来做它?

提前致谢!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

看起来您正在使用较旧版本的AutoMapper。 5.x版本包含一个上下文对象,您可以像尝试一样使用它。

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