【问题标题】:Abstract classes with automapper带有自动映射器的抽象类
【发布时间】:2011-10-13 01:44:05
【问题描述】:

我有一个基类:

public abstract class User
{
    /* properties */
}

public class Teacher : User
{

}

public class Student : User
{

}

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

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 配置?

【问题讨论】:

  • 是您试图映射到抽象类的问题吗?如果你知道类型是 Teacher,为什么不能只做 Mapper.Map() ?
  • @someweather,我想将该逻辑带入映射器,因为我可能需要多次编写该代码来检查类型,然后选择映射类型。
  • 这会有帮助吗?您仍然需要某种方式来访问所需继承类的类型...stackoverflow.com/questions/5578253/…

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多