Automapper: передача параметра в метод Map
Я использую Automapper в проект и мне нужно динамически оценить поля моего объекта назначения.
в моей конфигурации у меня есть что-то подобное:
cfg.CreateMap<Message, MessageDto>()
// ...
.ForMember(dest => dest.Timestamp, opt => opt.MapFrom(src => src.SentTime.AddMinutes(someValue)))
//...
;
на someValue
в коде конфигурации есть параметр, который мне нужно передать во время выполнения в mapper и не является полем исходного объекта.
есть ли способ достичь этого? Что-то вроде этого:--6-->
Mapper.Map<MessageDto>(msg, someValue));
2 ответов
вы не можете делать именно то, что хотите, но вы можете получить довольно близко, указав параметры отображения при вызове Map. Игнорируйте свойство в конфигурации:
cfg.CreateMap<Message, MessageDto>()
.ForMember(dest => dest.Timestamp, opt => opt.Ignore())
;
затем передайте параметры, когда вы вызываете свою карту:
int someValue = 5;
var dto = Mapper.Map<Message, MessageDto>(message, opt =>
opt.AfterMap((src, dest) => dest.TimeStamp = src.SendTime.AddMinutes(someValue)));
обратите внимание, что вам нужно использовать Mapper.Map<TSrc, TDest>
перегрузка для использования этого синтаксиса.
другим возможным вариантом при использовании метода Map будет использование словаря элементов. Пример:
int someValue = 5;
var dto = Mapper.Map<Message>(message,
opts => opts.Items["Timestamp"] = message.SentTime.AddMinutes(someValue));
Это немного меньше кода и имеет преимущество динамически указанных полей.