Automapper自动解析要映射到的正确子类?

Rob*_*ett 9 c# polymorphism automapper

给定以下源类型:

public class BaseViewModel
{
   public string Prop1 { get; set; }
}

public class FirstViewModelImpl : BaseViewModel
{
   public string Prop2 { get; set; } 
}

public class SecondViewModelImpl : BaseViewModel
{
   public string AnotherProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及目的地类型

public class BaseDto
{
   public string Prop1 { get; set; }
}

public class FirstDtoImpl : BaseDto
{
   public string Prop2 { get; set; } 
}

public class SecondDtoImpl : BaseViewModel
{
   public string AnotherProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用以下映射:

Mapper.CreateMap<FirstViewModelImpl,FirstDtoImpl>();
Mapper.CreateMap<SecondViewModelImpl,SecondDtoImpl>();
Run Code Online (Sandbox Code Playgroud)

我可以执行以下操作(简单示例) - 假设我直到运行时才知道viewmodel的类型?

BaseViewModel myViewModel = GetAViewModelFromSomewhere();
FirstDtoImpl dto = (FirstDtoImpl)Mapper.Map<BaseViewModel,BaseDto>(myViewModel);
Run Code Online (Sandbox Code Playgroud)

无论如何我现在正在尝试这个!

Rob*_*ett 18

我发现如果我将映射更改为

Mapper.CreateMap<BaseViewModel,BaseDto>()
        .Include<FirstViewModelImpl,FirstDtoImpl>()
        .Include<SecondViewModelImpl,SecondDtoImpl>();

Mapper.CreateMap<FirstViewModelImpl,FirstDtoImpl>();
Mapper.CreateMap<SecondViewModelImpl,SecondDtoImpl>();
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作,而不使用类型转换器.