自动映射器将对象映射到任何继承的目标类型



让我们有一个DTO类:

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

和视图模型类(基本 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(...)),每次使用创建目标类,如下所示:

在类库 1 中:

Mapper.CreateMap<UserDto, UserViewModel1>();

在第二个类库 2 中:

Mapper.CreateMap<UserDto, UserViewModel2>();

即使用户视图模型 1 和用户视图模型 2 派生自相同的基类UserViewModelBase

相关内容

  • 没有找到相关文章

最新更新