使用automapper的抽象类

Sha*_*ean 2 asp.net-mvc automapper asp.net-mvc-3

我有一个基类:

public abstract class User
{
    /* properties */
}

public class Teacher : User
{

}

public class Student : User
{

}
Run Code Online (Sandbox Code Playgroud)

然后我想将我的视图模型映射到基于属性的这些子类之一:

public enum UserType
{
    Teacher,
    Student
}

public class UserVM
{
    /* Properties of User */
    public UserType UserType {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

基于UserVM.UserType,我想映射到相关的子类:

userModel.UserType = UserType.Teacher;
//user will be of type Teacher
var user = Mapper.Map<UserVM, User>(userModel);
Run Code Online (Sandbox Code Playgroud)

如何CreateMap为此设置配置?

Dar*_*rov 7

您可以ConstructUsing根据枚举值使用实例化逻辑的位置:

Mapper
    .CreateMap<UserVM, User>()
    .ConstructUsing(userVM =>
    {
        if (userVM.UserType == UserType.Teacher)
        {
            return new Teacher();
        }
        return new Student();
    });
Run Code Online (Sandbox Code Playgroud)