2014-12-19 124 views
9

我需要映射到protected屬性,使用Automapper。我在這個類上有一個public方法,用於爲屬性設置值。該方法需要parameter。我怎樣才能將一個值映射到這個類?自動映射器:映射到受保護的屬性

目的類:

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

這裏是我的Automapper代碼(僞代碼)看起來像:

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

我需要一個結算類傳遞給SetBilling(開票結算)方法。我該怎麼做呢?或者,我可以只設置受保護的結算屬性?

+0

的2類並不共享很少爲自己的屬性相同的名字。所以,我知道如何使用Automapper的唯一方法是使用.ForMember。 –

回答

12

也是可能的:告訴AutoMapper認識到保護成員:

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

無需額外AfterMap。 AutoMapper默認驗看公共屬性,你必須告訴它在全球或個人資料基礎上做了一些不同的東西(https://github.com/AutoMapper/AutoMapper/wiki/Configuration#configuring-visibility

+0

這就是爲什麼SO是網絡上最好的技術資源的原因之一。你還可以在哪裏問一個問題,並由撰寫軟件的人回答。 –

+0

哪種效率更高?使用AfterMap或配置? –

+0

效率更高,還是更明顯?我喜歡用更多的語義方法。 AfterMap真的是核選項,並且更容易出錯。 –