簡體   English   中英

為WCF合同中的通用類型添加AutoMapper類型映射約定

[英]Adding AutoMapper Type Mapping Conventions For Generic Types in WCF Contract

我有一個在其數據協定中使用泛型的WCF服務,例如(簡化):

public GetDetails(StatusField<string> status);

現在,WCF通過為泛型中的每個可能的T值創建非泛型等效類型來支持泛型。 因此,對於上面的示例,使用WCF服務的客戶端將看到上述函數的以下簽名:

public GetDetails(stringStatusField status);
//...

現在,客戶端具有StatusField類的通用版本的副本。 我們想在客戶端中使用AutoMapper,在這個通用StatusField和WCF上面生成的類型(例如stringStatusField)之間進行映射,以便我們可以調用該服務。 我們可以通過在客戶端啟動時手動創建映射來完成此操作,如下所示:

Mapper.CreateMap<StatusField<string>, stringStatusField>();

然而,這很費力,因為WCF已經轉換了50多個可能的值。 擴展這個想法,我們可以使用反射自動為所有類型創建地圖,這是我們目前使用的解決方案。

理想情況下,我希望看到的是一個與AutoMapper架構相關聯的解決方案,以避免必須手動進行反射。 從概念上講,這需要界定AutoMapper將使用以允許它以配合兩種類型在一起,類似於它是如何使匹配性能時需要指定定制公約公約的一些方法。 到目前為止,我還沒有看到這樣做的方法,這是我想在這里回答的問題,如果有人知道如何做到這一點,特別是與上述情況有關。

BTW我知道有些人可能會想到Mapper.DynamicMap()作為這個問題的解決方案。 首先,我們不想使用它,因為它意味着調試可能更難(如其他帖子中的一些類似的指示)以及如果StatusField深度嵌套在傳遞給WCF方法的對象圖中,我不確定此解決方案將起作用,並可能導致類型錯誤映射和其他此類問題。 如果可能的話,我真的想具體定義允許的映射。

不確定AutoMapper是否提供您所支持的支持,但如果確實如此,則會按照您的建議使用反射。

如果由於性能問題(這應該是一次性啟動成本)而反對反射解決方案,那么基於T4模板的代碼生成解決方案可能值得考慮嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM