AutoMapper 双重失败

AutoMapper failing on on double

我有以下类

public class EstimationDTO
{
    public EstimationDTO() { }
    public EstimationDTO(double best, double mostLikely, double worst)
    {
        this.BestEffort = best;
        this.MostLikelyEffort = mostLikely;
        this.WorstEffort = worst;
    }
    public double BestEffort { get; set; }
    public double MostLikelyEffort { get; set; }
    public double WorstEffort { get; set; }
}
public class Estimation
{
    public Estimation() { }
    public Estimation(double best, double mostLikely, double worst)
    {
        this.BestEffort = best;
        this.MostLikelyEffort = mostLikely;
        this.WorstEffort = worst;
    }
    public double BestEffort { get; set; }
    public double MostLikelyEffort { get; set; }
    public double WorstEffort { get; set; }
}

我有以下 AutoMapper 配置

Mapper.CreateMap<EstimationDTO, Estimation>();
Mapper.CreateMap<Estimation, EstimationDTO>();

当我尝试在两者之间进行转换时,即

var x = Mapper.Map<EstimationDTO>(new Estimation{ BestEffort = 0.1, MostLikelyEffort = 0.2, WorstEffort = 0.3 });

automapper 抛出以下错误:

AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

Mapping types:
Estimation -> Double

(请注意,如果我尝试反向转换,它会抛出相同的错误)。
我尝试对属性进行显式映射,但这并没有解决问题。

如果我指定双重转换

Mapper.CreateMap<EstimationDTO, double>();
Mapper.CreateMap<Estimation, double>();

它可以正常工作并在两种类型之间正确转换。

为什么我必须为 类 指定此特定转换?

使用构造函数参数时,您需要创建显式映射,以 .ConstructUsing() 概述这些构造函数参数(此示例在版本 4.0.4 中)。

void Main()
{
    Mapper.CreateMap<EstimationDTO, Estimation>()
        .ConstructUsing(
            (Func<EstimationDTO, Estimation>)(x => new Estimation(0.1, 0.2, 0.3)));

    Mapper.CreateMap<Estimation, EstimationDTO>()
        .ConstructUsing(
            (Func<Estimation, EstimationDTO>)(x => new EstimationDTO(0.1, 0.2, 0.3)));

    var mapped = Mapper.Map<EstimationDTO>(
        new Estimation{ BestEffort = 0.1, MostLikelyEffort = 0.2, WorstEffort = 0.3 });

    mapped.Dump();
}