2010-06-22 115 views
1

我有在MVC/MVVM類型的應用程序所使用的下面的示例類:如何使用Automapper映射繼承層次結構?

class A 
{ 
    public string Property1 { get; set; } 
} 

class B : A 
{ 
    public string Property2 { get; set; } 
} 

class ViewModel 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
} 

A是我的基類,B是派生的類。 ViewModel是爲了包含A & B.

我想使用AutoMapper從A & B映射到ViewModel。做這個的最好方式是什麼?

假設我在A上具有需要.ForMember調用的複雜屬性,那麼當創建從B到ViewModel的映射時是否必須爲這些複雜屬性重複相同的映射,或者是否有繼承/重用映射的方法從A到ViewModel?

+0

由於A沒有Property2,在這種情況下應該是什麼行爲?只是忽略它? – 2010-06-22 12:33:16

+0

@Jimmy - 是的,要忽略。 – GiddyUpHorsey 2010-06-22 21:30:04

回答

1

如果將A映射到ViewModel,則需要忽略A上不存在的Ignore()成員,並重復需要共享的任何配置。

繼承是一個艱難的堅果,行爲開始變得複雜和不太傳統。但是,您可以在配置API上創建一個擴展方法來封裝所有重複的配置調用。

+0

我已經用擴展方法的想法重新使用配置。儘管我似乎不需要明確地忽略成員。我需要嗎? – GiddyUpHorsey 2010-06-25 11:49:10

+0

Ignore()實際上只是用於配置驗證。 – 2010-06-25 14:37:17