2017-04-13 258 views
0

我有像這樣AutoMapperMappingException獲取屬性名稱

public interface IFoo 
{ 
    byte[] Content{get; set;} 
} 

public class FooDTO : IFoo 
{ 
    byte[] Content {get; set;} 
} 

public FooAdapter : IFoo 
{ 
    Picture _picture; 
    public FooAdapter(Picture picture) 
    { 
     this._picture = picture; 
    } 

    public byte[] Content => this._picture.GetContent(); 
} 

自定義適配器圖案。然後我有一個擴展的方法來我的實體轉化爲DTO像之間,

public static FooDTO ToDTO(this IFoo getter) 
{ 
    return AutoMapperExtensions.Map<IFoo, FooDTO >(getter);    
} 

該適配器適配器相同的接口IFoo,偶爾我得到AutoMapperMappingExceptions

映射類型: FooAdapter - >字節[] MyNamespace.FooAdapter - > System.Byte []

目標路徑: FooDTO.Content

Source值:MyNamespace.FooAdapter

所有這些信息是很好的但我怎樣才能得到引發錯誤的屬性的屬性名稱?

+0

只是一個簡單的問題,你爲什麼試圖映射已經有一個getter屬性的值(即返回一個值)? – DOMZE

+0

@DOMZE此適配器模式有多個好處。 1.通過這樣做,您不必在您的DTO和您的實體之間擁有相同的名稱。 2.這提供了一個映射之間的附加層,所以你可以添加邏輯,例如你可能不想映射你的Id,因爲它們是從服務器設置的,如果有人修改了你的dto的Id等,可能會導致一個錯誤。 –

+0

我的錯,我誤讀了目的地不是你的實體;-) – DOMZE

回答

1

因爲任何人想知道您可以通過錯誤上下文訪問成員名稱。

catch(AutoMapperMappingException mappingException) 
{ 
    BuildNewError(mappingException.Context.MemberName); 
}