Domanda
Cercando di AutoMap alcuni oggetti.
oggetti di origine ha proprietà con _ prima del nome, oggetti di destinazione - non hanno.
E 'possibile implementare ONE creazione della mappa, che avrebbe automapper mappa tutte _properties per immobili
per tutti i tipi di sorgente.
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; }
}
Soluzione
Qualcosa ho aggiunto di recente per automapper potrebbe aiutare - denominazione personalizzato convenzioni. Se si estrae il tronco (R107), guardarsi intorno per INamingConvention. In questo momento, ho due convenzioni di denominazione (PascalCase e lower_case_underscore), ma è davvero solo una questione di capire la RegEx diritto di farti andare:
In questo momento, le convenzioni di denominazione sono globali e profilo con ambito. Dal momento che questa funzione è stata introdotta, non c'è alcuna documentazione diverso dai test.
Altri suggerimenti
Questo è come lo sto facendo
Mapper.Initialize(cfg =>
{
cfg.RecognizeDestinationPrefixes(new []{"_"});
cfg.RecognizePrefixes(new[] { "_" });
cfg.CreateMap<To, From>().ReverseMap();
});
Per questo si potrebbe aggiungere una mappatura personalizzata per risolvere questo caso particolare:
Mapper.CreateMap<From, To>()
.ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
.ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );