项目
版本

AutoMapper 构造函数映射

AutoMapper 可以根据源成员映射到目标对象的构造函数:

public class Source {
    public int Value { get; set; }
}
public class SourceDto {
    public SourceDto(int value) {
        _value = value;
    }
    private int _value;
    public int Value {
        get { return _value; }
    }
}
var configuration = new MapperConfiguration(cfg => cfg.CreateMap<Source, SourceDto>());

如果目标构造函数的参数名称不匹配,你可以在配置时修改它们:

public class Source {
    public int Value { get; set; }
}
public class SourceDto {
    public SourceDto(int valueParamSomeOtherName) {
        _value = valueParamSomeOtherName;
    }
    private int _value;
    public int Value {
        get { return _value; }
    }
}
var configuration = new MapperConfiguration(cfg =>
  cfg.CreateMap<Source, SourceDto>()
    .ForCtorParam("valueParamSomeOtherName", opt => opt.MapFrom(src => src.Value))
);

这既适用于 LINQ 投影,也适用于内存中的映射。

你也可以禁用构造函数映射:

var configuration = new MapperConfiguration(cfg => cfg.DisableConstructorMapping());

你可以配置哪些构造函数被视为目标对象的候选:

// 使用仅公共构造函数
var configuration = new MapperConfiguration(cfg => cfg.ShouldUseConstructor = constructor => constructor.IsPublic);

当映射到记录类型时,请考虑仅使用公共构造函数。

在本文档中