当前位置:  开发笔记 > 编程语言 > 正文

Automapper:将参数传递给Map方法

如何解决《Automapper:将参数传递给Map方法》经验,为你挑选了2个好方法。

我在项目中使用Automapper,我需要动态定值目标对象的字段.

在我的配置中,我有类似的东西:

cfg.CreateMap()
    // ...
    .ForMember(dest => dest.Timestamp, opt => opt.MapFrom(src => src.SentTime.AddMinutes(someValue)))
    //...
    ;

someValue配置中的代码是,我需要在运行时传递给映射器并且不是所述源对象的一个字段的参数.

有没有办法实现这个目标?像这样的东西:

Mapper.Map(msg, someValue));

Richard.. 50

您不能完全按照自己的意愿行事,但是当您调用Map时,可以通过指定映射选项来获得非常接近的结果.忽略配置中的属性:

cfg.CreateMap()
    .ForMember(dest => dest.Timestamp, opt => opt.Ignore())
    ;

然后在调用地图时传入选项:

int someValue = 5;
var dto = Mapper.Map(message, opt => 
    opt.AfterMap((src, dest) => dest.TimeStamp = src.SendTime.AddMinutes(someValue)));

请注意,您需要使用Mapper.Map重载来使用此语法.



1> Richard..:

您不能完全按照自己的意愿行事,但是当您调用Map时,可以通过指定映射选项来获得非常接近的结果.忽略配置中的属性:

cfg.CreateMap()
    .ForMember(dest => dest.Timestamp, opt => opt.Ignore())
    ;

然后在调用地图时传入选项:

int someValue = 5;
var dto = Mapper.Map(message, opt => 
    opt.AfterMap((src, dest) => dest.TimeStamp = src.SendTime.AddMinutes(someValue)));

请注意,您需要使用Mapper.Map重载来使用此语法.


在这种情况下不是更容易而不是AfterMap只分配dto.TimeStamp = message.SendTime.AddMinutes(someValue);

2> 小智..:

使用Map方法时另一个可能的选项是使用Items字典.例:

int someValue = 5;
var dto = Mapper.Map(message, 
    opts => opts.Items["Timestamp"] = message.SentTime.AddMinutes(someValue));

它的代码少一点,并且具有动态指定字段的优点.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有