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));
它的代码少一点,并且具有动态指定字段的优点。