Question
Essayer de Automap certains objets.
objets source a des propriétés avec _ avant le nom, les objets de destination - pas.
Est-il possible de mettre en oeuvre une création de carte, que automapper tracerait tous _properties aux propriétés
pour tous les types de sources.
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; }
}
La solution
Quelque chose que j'ajouté récemment à AutoMapper pourrait vous aider - les conventions de nommage personnalisées. Si vous consultez le coffre (R107), regarder autour de INamingConvention. En ce moment, j'ai deux conventions de nommage (de PascalCase et lower_case_underscore), mais il est vraiment juste une question de déterminer le droit RegEx pour vous y aller:
En ce moment, les conventions de nommage sont globaux et le profil scope. Étant donné que cette fonctionnalité est nouvelle, il n'y a pas de document autre que les tests.
Autres conseils
Voici comment je le fais
Mapper.Initialize(cfg =>
{
cfg.RecognizeDestinationPrefixes(new []{"_"});
cfg.RecognizePrefixes(new[] { "_" });
cfg.CreateMap<To, From>().ReverseMap();
});
Pour cela, vous pouvez ajouter un mappage personnalisé pour résoudre ce cas particulier:
Mapper.CreateMap<From, To>()
.ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
.ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );