简体   繁体   中英

AutoMapper map object to any inherited destination type

lets have an DTO class:

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

And viewmodel class (base mvc project library):

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

now when i create mapping for automapper like this:

Mapper.CreateMap<UserDto, UserViewModelBase>();

in main web mvc project i have concreate implementation of UserViewModelBase, like this:

public class UserViewModel: UserViewModelBase {
}

Now when i call this:

Mapper.Map<UserDto, UserViewModel>()

it fails with such error:

Missing type map configuration or unsupported mapping.

UserDto -> UserViewModel

As i understand that this was caused that i havent defined direct mapping between UserDto and UserViewModel. I want to know if there is some way how to tell AutoMapper that with this map Mapper.CreateMap<UserDto, UserViewModelBase>(); it should accept any type as destination type which inherits from UserViewModelBase .

Seems no one knows how to achieve this so i made workaround for this.

My workaround was to build mappings (using Mapper.CreateMap(...) ) multiple times each with concreate target class like:

in ClassLibrary1:

Mapper.CreateMap<UserDto, UserViewModel1>();

in second ClassLibrary2:

Mapper.CreateMap<UserDto, UserViewModel2>();

even if UserViewModel1 and UserViewModel2 is derived from same base class UserViewModelBase .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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