2009-04-09 18 views
4

Versuchen, einige Objekte zu automatisieren.
Quellobjekte haben Eigenschaften mit _ vor Namen, Zielobjekte - nicht. Ist es möglich, EINE Kartenerstellung zu implementieren, würde dieser Automapper alle _properties für alle Quellentypen den Eigenschaften
zuordnen.AutoMapper Problem

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; } 
} 

Antwort

8

Etwas, das ich vor kurzem zu AutoMapper hinzugefügt könnten Ihnen helfen - individuelle Namenskonventionen. Wenn Sie den Trunk (R107) auschecken, suchen Sie nach INamingConvention. Gerade jetzt, ich habe zwei Namenskonventionen (Pascal und lower_case_underscore), aber es ist wirklich nur eine Frage von herauszufinden, die richtige RegEx aus um Sie gehen:

INamingConvention.cs

Gerade jetzt, Namenskonventionen sind global und Profil- beschränkt. Da diese Funktion neu ist, gibt es keine andere Dokumentation als die Tests. Diese

+0

Ich benutze im Moment nicht AM, aber es ist schön über diese Funktion zu wissen. :) –

+1

der Link in dieser Antwort gibt eine 404, können Sie bitte aktualisieren? Danke für die tolle Arbeit Jimmy! – shanabus

+1

Der Link ist tot. – gdoron

0

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)); 
+0

Hier geht die Wirkung ich brauche, aber ... ich wollte mehr generisch sein. Wie sagen - Automapper, diese 2 Objekte zuordnen, und ignorieren Unterstrich des Prop Name, wenn es das erste Symbol im Namen ist. Ansonsten - ich muss auf alle Objektpaare achten. –

1

ist, wie ich es tun

Mapper.Initialize(cfg => 
     { 
      cfg.RecognizeDestinationPrefixes(new []{"_"}); 
      cfg.RecognizePrefixes(new[] { "_" }); 

      cfg.CreateMap<To, From>().ReverseMap(); 
     });