我对 Mapster 有疑问。有一些课
public class DtoClass
{
public string Name { get; set; }
public ParamValueDto Value { get; set; }
}
public class ParamValueDto
{
public int Value { get; set; }
}
public class TargetClass
{
public string Name { get; set; }
public object Value { get; set; }
public TargetClass(string name, object value)
{
Name = name;
Value = value;
}
}
public class TargetParamValue
{
public int Value { get; set; }
public TargetParamValue(int value)
{
Value = value;
}
}
配置:
config.ForType<DtoClass, TargetClass>()
.MapToConstructor(true)
.ConstructUsing(x => new TargetClass(x.Name, new TargetParamValue(x.Value)));
一切都很好,对象按预期映射,但如果你再添加一个构造函数到TargetClass
public class TargetClass
{
public string Name { get; set; }
public object Value { get; set; }
public TargetClass(string name, object value)
{
Name = name;
Value = value;
}
public TargetClass(Foo foo) //Where Foo is any class
{
Name = "fsdf";
Value = new ParamValueDto();
}
}
在最终结果中,Value
不会TargetParamValue
像预期的那样包含,但是ParamValueDto
,就好像结果ConstructUsing
被忽略(但被调用)或覆盖一样。构造函数被正确调用 - 并TargetParamValue
到达value
,但最终结果将具有不正确的参数(带有ParamValueDto
in Value
)。(新 ctor - 未调用)