2014-12-19 8 views
9

Ich muss zu einer protected Eigenschaft auf einer Klasse mit Automapper zuordnen. Ich habe eine public-Methode für diese Klasse verfügbar gemacht, die zum Festlegen von Werten für die Eigenschaft verwendet wird. Diese Methode erfordert eine parameter. Wie kann ich dieser Klasse einen Wert zuordnen?Automapper: Map Geschützte Eigenschaft

Destination Klasse:

public class Policy 
    { 
     private Billing _billing; 

     protected Billing Billing 
      { 
       get { return _billing; } 
       set { _billing = value; } 
      } 

     public void SetBilling(Billing billing) 
      { 
       if (billing != null) 
       { 
        Billing = billing; 
       } 
       else 
       { 
        throw new NullReferenceException("Billing can't be null"); 
       } 
      } 
    } 

Hier ist, was meine Automapper Code (Pseudo-Code) wie folgt aussieht:

Mapper.CreateMap<PolicyDetail, Policy>() 
      .ForMember(d => d.SetBilling(???), 
          s => s.MapFrom(x => x.Billing)); 

Ich brauche eine Billing-Klasse an den SetBilling (Billing Abrechnung) Methode übergeben. Wie mache ich das? Oder kann ich einfach die geschützte Rechnungseigenschaft festlegen?

+0

Die 2 Klassen teilen nicht sehr wenige der gleichen Namen für ihre Eigenschaften. Also, der einzige Weg, wie ich den Automapper dafür benutze, ist .ForMember. –

Antwort

12

Auch möglich: AutoMapper sagen geschützte Mitglieder zu erkennen:

Mapper.Initialize(cfg => 
{ 
    // map properties with public or internal getters 
    cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly; 
    cfg.CreateMap<Source, Destination>(); 
}); 

Keine zusätzlichen AfterMap benötigt. AutoMapper sucht standardmäßig nach öffentlichen Eigenschaften. Sie müssen es auf globaler oder Profilbasis angeben, um etwas anderes zu tun (https://github.com/AutoMapper/AutoMapper/wiki/Configuration#configuring-visibility)

+0

Dies ist einer der Gründe, warum SO die beste technische Ressource im Internet ist. Wo sonst können Sie eine Frage stellen und sie von der Person beantwortet bekommen, die die Software geschrieben hat. –

+0

Was ist effizienter? Mit AfterMap oder Konfiguration? –

+0

Effizienter oder offensichtlicher? Ich gehe gerne mit dem eher semantischen Ansatz. AfterMap ist wirklich die nukleare Option und ist fehleranfälliger. –

Verwandte Themen