2014-12-19 24 views
9

Automapper kullanarak bir sınıftaki protected özelliğine eşlemeliyim. Bu sınıfa değer biçmek için kullanılan bir public yöntemi var. Bu yöntem, bir parameter gerektirir. Bir değeri bu sınıfa nasıl eşleyebilirim?Automapper: Korumalı Özellik Haritası

Hedef Sınıfı: Ben SetBilling (Fatura faturalama) yöntemine bir Faturalandırma sınıfını geçmesi gerekiyor

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

:

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

İşte böyle (sözde code) Automapper kod görünüyor budur. Bunu nasıl yaparım? Veya korumalı Faturalandırma özelliğini ayarlayabilir miyim?

+0

2 sınıf, özellikleri için aynı adlardan çok azını paylaşmıyor. Bu yüzden, Automapper'ı nasıl kullanacağımı bilmenin tek yolu .ForMember'i kullanmaktır. –

cevap

12

mümkün: korumalı üyelerini tanımak için AutoMapper söyle:

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

gerekli İlave AfterMap. AutoMapper varsayılan olarak genel özellikler için görünüyor, farklı bir şey yapmak için global veya Profil temelinde anlatmanız gerekiyor (https://github.com/AutoMapper/AutoMapper/wiki/Configuration#configuring-visibility)

+0

Bu, SO'nun web'deki en iyi teknik kaynak olmasının nedenlerinden biridir. Başka bir soru sorabilir ve yazılımı yazan kişi tarafından yanıt verebilirsiniz. –

+0

Hangisi daha verimli? AfterMap veya yapılandırmayı kullanma? –

+0

Daha verimli, ya da daha belirgin? Daha semantik yaklaşımı ile gitmek istiyorum. AfterMap gerçekten nükleer bir seçenektir ve daha fazla hataya yatkındır. –