Pregunta
Tratando de AutoMAPA algunos objetos.
objetos de origen tiene propiedades con _ antes del nombre, objetos de destino - no tienen.
¿Es posible implementar una creación de mapas, que sería AutoMapper mapa todos _properties a las propiedades
para todos los tipos de fuentes.
class MyMapper<TFrom, TTo>{
TTo PerformMap(TFrom fromObject){
Mapper.CreateMap<From, To>(); // ???
TTo result = Mapper.Map<From, To>(fromObject);
//result.Id.ShouldBe(value from TFrom._Id);
return result;
}
}
class From
{
public int _Id { get; set; }
public string _Name { get; set; }
}
class To
{
public int Id { get; set; }
public string Name { get; set; }
}
Solución
Algo he añadido recientemente a AutoMapper podría ayudarle - convenciones de nombres personalizado. Si retira el tronco (R107), mirar alrededor para INamingConvention. En este momento, tengo dos convenciones de nomenclatura (PascalCase y lower_case_underscore), pero no deja de ser una cuestión de averiguar la expresión regular correcta para que te va:
En este momento, las convenciones de nomenclatura son globales y el perfil de ámbito. Dado que esta característica es nueva, no hay ninguna documentación que no sea las pruebas.
Otros consejos
Esta es la forma en que lo estoy haciendo
Mapper.Initialize(cfg =>
{
cfg.RecognizeDestinationPrefixes(new []{"_"});
cfg.RecognizePrefixes(new[] { "_" });
cfg.CreateMap<To, From>().ReverseMap();
});
Para esto se podría añadir una asignación personalizada para resolver este caso en particular:
Mapper.CreateMap<From, To>()
.ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
.ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );