c# - mvc - Automapper: pasando el parámetro al método Map
automapper nuget (2)
No puede hacer exactamente lo que quiere, pero puede acercarse bastante al especificar las opciones de mapeo cuando llama a Map. Ignora la propiedad en tu configuración:
cfg.CreateMap<Message, MessageDto>()
.ForMember(dest => dest.Timestamp, opt => opt.Ignore())
;
Luego pase las opciones cuando llame a su mapa:
int someValue = 5;
var dto = Mapper.Map<Message, MessageDto>(message, opt =>
opt.AfterMap((src, dest) => dest.TimeStamp = src.SendTime.AddMinutes(someValue)));
Tenga en cuenta que necesita usar la Mapper.Map<TSrc, TDest>
para usar esta sintaxis.
Estoy usando Automapper en un proyecto y necesito valorizar dinámicamente un campo de mi objeto de destino.
En mi configuración tengo algo similar:
cfg.CreateMap<Message, MessageDto>()
// ...
.ForMember(dest => dest.Timestamp, opt => opt.MapFrom(src => src.SentTime.AddMinutes(someValue)))
//...
;
El someValue
en el código de configuración es un parámetro que necesito pasar en tiempo de ejecución al asignador y no es un campo del objeto fuente.
¿Hay una manera de lograr esto? Algo como esto:
Mapper.Map<MessageDto>(msg, someValue));
Otra opción posible mientras usa el método de Mapa sería el uso del diccionario de Artículos. Ejemplo:
int someValue = 5;
var dto = Mapper.Map<Message>(message,
opts => opts.Items["Timestamp"] = message.SentTime.AddMinutes(someValue));
Es un poco menos de código y tiene la ventaja de campos especificados dinámicamente.