net - imapper c#




Automapper: pasando el parámetro al método Map (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.





automapper-3