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);
当映射到记录类型时,请考虑仅使用公共构造函数。