将其他属性传递给AutoMapper Mappings

本文关键字:AutoMapper Mappings 其他 属性 | 更新日期: 2023-09-27 18:09:02

是否有可能像这样映射对象?

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);

遗憾的是,在ConstructUsing方法的当前lambda中没有Contex属性。或者有更优雅的方法?

提前感谢!

将其他属性传递给AutoMapper Mappings

您可以使用:

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)

看起来您使用的是旧版本的AutoMapper。5。X版本包含一个上下文对象,你可以像你想做的那样使用。

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