我想實現從DTO到C#中的模型的映射。場景:SOLID並映射DTO的集合
- 我有一個
List<DTO>
,並把它映射到List<ViewModel>
- 輸入列表包含
DTO
派生不同類別,例如實例User
,Product
- 我根據DTO需要不同的模型實例的結果,例如,
UserModel
,ProductModel
(從ViewModel
所有派生)
我的約束是:
- 我不能使用映射器(Automapper,ValueInjecter,...)
- 的DTO被放置在自己的圖書館,並且不知道的視圖模型(但視圖模型都知道DTO)
- 我希望儘可能接近SOLID(我想避免基於對象類型的開關/ if語句)
現在我正在尋找一個很好的方法來實現整個事情。到目前爲止,我所創建的幫助類是Dictionary<Type, Type>
,所以我可以根據DTO的類型(使用Activator)查找要實例化的視圖模型,然後在基本視圖模型中實現ViewModel.Map(DTO dto)
,然後在所有視圖模型類。這種Map
方法需要將DTO投射到適當的類型(例如在UserModel.Map()
的情況下爲User
)。還有其他建議嗎?我能否以某種方式避免投射?
編輯
示例代碼:https://github.com/andy250/Sandbox(項目智能地圖)
您可以在http://www.uglybugger.org/software/post/friends_dont_let_friends_use_automapper – user2864740
找到一些有用的想法不幸的是這篇文章沒有解決我的問題。我找到了這個:https://visualstudiomagazine.com/Blogs/Tool-Tracker/2013/01/Picking-Overloaded-Methods-at-Runtime.aspx。但在我的情況下,我再也看不到利用這種多次派遣的方式。 – andy250
您是否簽出答案? @ andy250 –