2014-12-05 171 views
1

有沒有辦法用AutoMapper映射靜態類?用AutoMapper映射靜態類

情景是這樣的。有一個名爲UserIdentity的靜態類,它包含屬性。我想將UserIdentity類的值映射到我的無靜態類UserDTO

當我試圖

AutoMapper.Mapper.CreateMap<UserIdentity, UserDTO>(); 

有一個錯誤的說法,

static type cannot be used as type arguments 

現在任何人都可以解釋我這個場景,是實現與否。有沒有一種方法來映射靜態類而不使用Automapper。否則,我必須手動完成它們。

回答

0

不幸的是你不能使用automapper靜態類

此外,還有一組非常有限的,你可以參考靜態類類型的情況下,這也將使其他方法難以

靜態類防止不當使用,所以在幾乎所有情況下,在通常需要類型實例且包含類型參數的情況下,不能使用它們。

我可以看到,以達到您想要的結果的唯一方法是創建由字段映射功能,你的自我

全部儘管你可以強迫automapper使用虛擬類中的字段,你還在通過字段映射場反正,我的票是爲了降低複雜性,只是使用類似下面

public static SomeDTO CreateDTO() 
    { 
    return new SomeDTO 
     { 
      dest.Name = UserIdentity.Name; 
      dest.Id = UserIdentity.Id; 
      ect.. 
     } 
    } 
+0

你可以給我一個示例代碼,以獲得一個創建字段映射函數的想法嗎? – Wiki 2014-12-05 09:36:25

1

只有這樣,才能做到這一點是使用一個虛擬的類來執行無操作映射。然後,您可以使用自定義類型轉換器或映射功能或簡單地做這樣的事情:

Mapper.CreateMap<Dummy, Dest>() 
    .AfterMap((src, dest) => 
    { 
     dest.Name = UserIdentity.Name; 
     dest.Id = UserIdentity.Id; 
     //.... etc.. 
    }); 
+0

所以,解釋,不,你不能。而在這種情況下,爲什麼要包含AutoMapper呢?無論如何,如果你最終要手動繪製屬性。 – 2015-02-09 16:29:22

+0

@AndrewTheken - 好吧,如果您已經在使用AutoMapper處理其他事情,爲了保持一致性,使用類似模式保留所有映射是有意義的,即使這意味着要採取一些措施來使某些類型能夠工作。 – 2015-02-09 16:34:59

+0

由於應有的尊重,我認爲這是一個風格問題,我想我不同意添加不做任何事情的代碼,即使它「匹配樣式」有助於可讀性,但原始C#將不那麼「神奇」 「。 – 2015-02-09 17:19:06