我想实现从DTO到C#中的模型的映射。场景:
List<DTO>
,需要将其映射到List<ViewModel>
DTO
派生的各种类的实例,例如User
,Product
UserModel
,ProductModel
(全部来自ViewModel
)我的约束是:
现在我正在寻找一种实现整个事情的好方法。到目前为止我提出的是创建一个包含Dictionary<Type, Type>
的辅助类,以便根据DTO的类型(使用Activator)查找要实例化的视图模型,然后实现ViewModel.Map(DTO dto)
基本视图模型,然后在所有视图模型类中覆盖它。此Map
方法需要将DTO转换为正确的类型(例如,User
时为UserModel.Map()
。还有其他建议吗?我能以某种方式避免施法吗?
修改
示例代码:https://github.com/andy250/Sandbox(项目SmartMap)
答案 0 :(得分:0)
您可以使用包含Dictionary<Type,Type> map
对象的类来更好地映射DTO类和相应的Model对象,以便map.get(DTO.class)
为您提供对象本身。像
Dictionary<class,Model> map;
map.put(User.class, new UserModel());
否则,您可以使用类名进行类型映射,并使用反射在ObjectFactory类内创建对象。
你也可以实现原型模式,因此相应的类有一个静态方法来返回它自己的对象,但是已知单例和原型模式可以用来创建抽象
答案 1 :(得分:0)
我已经审核了您的解决方案,并花了一些时间来根据您的要求玩各种选项。这就是我为了做你想要的东西而需要用一些Castle Windsor集成复制Automapper功能的方法。示例讨论如何集成here。
这是我建议使用它。
答案 2 :(得分:0)
您可以根据接口
为每个DTO / ViewModel对设置自己的映射器interface Mapper<TSource,TTarget> {
TTarget ConvertToTarget(TSource source);
TSource ConvertFromTarget(TTarget target);
}