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

时间:2012-08-12 06:32:13

标签: c# automapper-2

让我们有一个DTO课程:

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

viewmodel类(基本mvc项目库):

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

现在当我像这样为automapper创建映射时:

Mapper.CreateMap<UserDto, UserViewModelBase>();

在主web mvc项目中我已经混合了UserViewModelBase的实现,如下所示:

public class UserViewModel: UserViewModelBase {
}

现在我打电话给你:

Mapper.Map<UserDto, UserViewModel>()

失败了,出现了这样的错误:

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

UserDto - &gt; UserViewModel

据我所知,这是因为我没有定义UserDto和UserViewModel之间的直接映射。 我想知道是否有一些方法告诉AutoMapper使用此映射Mapper.CreateMap<UserDto, UserViewModelBase>();它应该接受任何类型作为继承自UserViewModelBase的目标类型。

1 个答案:

答案 0 :(得分:0)

似乎没有人知道如何实现这一点,所以我为此做了解决方法。

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

ClassLibrary1中的

Mapper.CreateMap<UserDto, UserViewModel1>();
第二个ClassLibrary2中的

Mapper.CreateMap<UserDto, UserViewModel2>();

即使UserViewModel1和UserViewModel2派生自相同的基类UserViewModelBase