我有一个接口,有两个继承自它的类。
public interface IField
{
int FieldID { get; set; }
string FieldName { get; set; }
string FieldType { get; }
string FieldDisplayValue { get; set; }
}
public abstract class BaseField : IField
{
public int FieldID { get; set; }
public string FieldName { get; set; }
public abstract string FieldType { get; }
public string FieldDisplayValue { get; set; }
}
public class StaticText : BaseField, IField
{
public override string FieldType => "Text";
}
public class TextField : BaseField, IField
{
public override string FieldType => "TextBox";
public bool Required { get; set; }
public int MinimumLength { get; set; }
public int MaximumLength { get; set; }
public string DefaultText { get; set; }
}
我想根据传入类中包含的类型,将泛型类自动化为其中一个类。
public class FieldViewModel
{
public int FieldID { get; set; }
public string FieldName { get; set; }
public string FieldType { get; set; }
public string FieldDisplayValue { get; set; }
public bool Required { get; set; }
public int MinimumLength { get; set; }
public int MaximumLength { get; set; }
public string DefaultText { get; set; }
}
我构建了一个工厂类,它将根据fieldType返回相应的对象。我已成功获得使用工厂创建正确的具体类的automapper,但它只会映射接口中的字段,而不是具体类中定义的任何额外字段。
我的具体类接口的映射如下所示:
cfg.CreateMap<FieldViewModel, IField>()
.ConstructUsing(x => FieldFactory.CreateField(x.FieldType));
var iMapper = config.CreateMapper();
var field = iMapper.Map<FieldViewModel, IField>(sourceObject);
传入包含required,minimum或maximum的源类时,这些字段不会映射到新创建的具体类中。
甚至可以使用automapper吗?或者我是否需要自己映射这些字段?
答案 0 :(得分:0)
cfg.CreateMap<FieldViewModel, IField>()
.ConstructUsing(x => FieldFactory.CreateField(x.FieldType))
.BeforeMap((s,d,c) => c.Mapper.Map(s, d));
cfg.CreateMap<FieldViewModel, StaticText>();
cfg.CreateMap<FieldViewModel, TextField>();
最终必须为每个派生的具体类创建地图,但是之前的地图处理确保正确的地图与数据一起映射。