【问题标题】:Pass additional properties to AutoMapper Mappings将附加属性传递给 AutoMapper 映射
【发布时间】:2016-09-26 11:52:30
【问题描述】:

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

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 属性。或者也许有更优雅的方式来做到这一点?

提前致谢!

【问题讨论】:

    标签: c# mapping automapper


    【解决方案1】:

    你可以使用:

    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)
    

    【讨论】:

      【解决方案2】:

      您使用的似乎是旧版本的 AutoMapper。 5.x 版本包含一个上下文对象,您可以像尝试做的那样使用。

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

      【讨论】:

        猜你喜欢
        • 2015-10-23
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 2015-10-08
        相关资源
        最近更新 更多