繁体   English   中英

AutoMapper将对象映射到任何继承的目标类型

[英]AutoMapper map object to any inherited destination type

让我们有一个DTO类:

public class UserDto {
  public int Id { get;set; }
}

和viewmodel类(基本的mvc项目库):

public abstract class UserViewModelBase {
  public int Id { get;set; }
}

现在,当我为这样的自动映射器创建映射时:

Mapper.CreateMap<UserDto, UserViewModelBase>();

在主要的Web MVC项目中,我已经创建了UserViewModelBase的实现,如下所示:

public class UserViewModel: UserViewModelBase {
}

现在,当我打电话给我时:

Mapper.Map<UserDto, UserViewModel>()

它失败,并显示以下错误:

缺少类型映射配置或不支持的映射。

UserDto-> UserViewModel

据我了解,这是由于我没有在UserDto和UserViewModel之间定义直接映射而引起的。 我想知道是否有某种方法可以告诉AutoMapper该地图Mapper.CreateMap<UserDto, UserViewModelBase>(); 它应该接受从UserViewModelBase继承的任何类型作为目标类型。

似乎没人知道如何实现这一目标,因此我为此采取了解决方法。

我的解决方法是多次构建映射(使用Mapper.CreateMap(...) ),每次都使用Mapper.CreateMap(...)目标类,例如:

在ClassLibrary1中:

Mapper.CreateMap<UserDto, UserViewModel1>();

在第二个ClassLibrary2中:

Mapper.CreateMap<UserDto, UserViewModel2>();

即使UserViewModel1和UserViewModel2是从相同的基类UserViewModelBase

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM