asp.net-mvc - 带有自动映射器的抽象类

标签 asp.net-mvc asp.net-mvc-3 automapper

我有一个基类:

public abstract class User
{
    /* properties */
}

public class Teacher : User
{

}

public class Student : User
{

}

然后我想根据属性将我的 View 模型映射到这些子类之一:

public enum UserType
{
    Teacher,
    Student
}

public class UserVM
{
    /* Properties of User */
    public UserType UserType {get; set;}
}

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

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

如何为此设置我的 CreateMap 配置?

最佳答案

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

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

关于asp.net-mvc - 带有自动映射器的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748517/

相关文章:

c# - 预期对模拟调用一次,但为 0 次 未执行任何调用

asp.net - 局部 View 并将数据传递给布局 MVC3

c# - 在 ASP.Net MVC 的 View 模型中验证嵌套模型

asp.net-mvc - MVC 5 中的 IModelBinder 签名是否已更改?

asp.net-mvc - 使用Html.RouteLink添加CSS类

c# - MVC 路由与授权/授权标签

asp.net-mvc - 编辑器模板中的 Html.DropDownListFor 未设置选定值

c# - 不知道为什么 C# PowerShell Runspace 不定期关闭

c# - 我应该在哪里放置自动映射器代码?

AutoMapper 使用操作来填充目的地