Automapper:将参数传递给Map方法

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

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

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

配置代码中的someValue是我需要在运行时传递给映射器的参数,而不是源对象的字段。

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

 Mapper.Map(msg, someValue)); 

您不能完全按照自己的意愿行事,但是当您调用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重载来使用此语法。

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

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

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