tutorial net mvc inicializar imapper example ejemplo custom c# automapper

c# - net - Usar perfiles en Automapper para mapear los mismos tipos con lógica diferente



inicializar automapper c# (1)

Los perfiles son para segregar la configuración común aplicada en varios mapas de tipos, como el formato. Sin embargo, los mapas tipo siguen siendo globales. Es mejor que cree objetos de configuración separados y cree un MappingEngine separado para cada uno. La clase Mapper es simplemente una fachada estática sobre cada uno de ellos, con alguna gestión del ciclo de vida.

Estoy usando AutoMapper en mi sitio web ASP.NET MVC para asignar mis objetos de base de datos a los objetos de ViewModel y estoy tratando de usar varios perfiles para mapear los mismos tipos, pero usando otra lógica. Tuve la idea de hacerlo al leer la publicación de blog de Matt donde dice:

La parte realmente clave es el perfil de configuración de AutoMapper. Puede agrupar configuraciones con perfiles. Quizás en un perfil, usted da formato a las fechas de una manera, en otro perfil puede formatear las fechas de otra manera. Solo estoy usando un perfil aquí.

Así que creé un perfil para un caso:

public class MyProfile : Profile { protected override string ProfileName { get { return "MyProfile"; } } protected override void Configure() { CreateMap<DateTime, String>().ConvertUsing<StringFromDateTimeTypeConverter>(); } } public class StringFromDateTimeTypeConverter : ITypeConverter<DateTime, String> { public string Convert(DateTime source) { return source.ToString("dd/mm/yyyy", CultureInfo.InvariantCulture); } }

Y otro para otro caso:

public class MyProfile2 : Profile { protected override string ProfileName { get { return "MyProfile2"; } } protected override void Configure() { CreateMap<DateTime, String>().ConvertUsing<AnotherStringFromDateTimeTypeConverter>(); } } public class AnotherStringFromDateTimeTypeConverter : ITypeConverter<DateTime, String> { public string Convert(DateTime source) { return source.ToString("mm - yyyy", CultureInfo.InvariantCulture); } }

Sin embargo, no puedo encontrar ninguna sobrecarga del Mapper.Map<>() para especificar un perfil. También eché un vistazo al objeto Configuration sin suerte.
El último perfil registrado siempre tiene prioridad.

¿Hay alguna manera de usar perfiles para este propósito?