Frage
Der Versuch, einige Objekte Automap.
Quellobjekte haben Eigenschaften mit _ vor Namen, Zielobjekte - nicht.
Ist es möglich, eine Erstellung von Karten zu implementieren, dass AutoMapper würde alle _properties zu Immobilien Karte drucken
für alle Quellentypen.
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; }
}
Lösung
Etwas, das ich vor kurzem zu AutoMapper hinzugefügt könnte Ihnen helfen - individuelle Namenskonventionen. Wenn Sie die Stamm (R107) überprüfen, schauen Sie sich um für INamingConvention. Gerade jetzt, ich habe zwei Namenskonventionen (Pascal und lower_case_underscore), aber es ist wirklich nur eine Frage der Bezifferung das Recht RegEx aus, um Sie gehen:
Im Moment sind Namenskonventionen global und profile-scoped. Da diese Funktion neu ist, gibt es keine Dokumentation andere als die Tests.
Andere Tipps
Dies ist, wie ich es tue,
Mapper.Initialize(cfg =>
{
cfg.RecognizeDestinationPrefixes(new []{"_"});
cfg.RecognizePrefixes(new[] { "_" });
cfg.CreateMap<To, From>().ReverseMap();
});
Dazu könnten Sie eine benutzerdefinierte Zuordnung hinzufügen, um diesen speziellen Fall zu lösen:
Mapper.CreateMap<From, To>()
.ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
.ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );