[英]Is it possible for Automapper to map fields to concrete classes
我有一個接口,有兩個從其繼承的類。
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返回適當的對象。 我已經成功地獲得了自動映射器,可以使用工廠來創建正確的具體類,但是它將僅映射接口中的字段,而不會映射具體類中定義的任何其他字段。
我的具體類接口圖如下:
cfg.CreateMap<FieldViewModel, IField>()
.ConstructUsing(x => FieldFactory.CreateField(x.FieldType));
var iMapper = config.CreateMapper();
var field = iMapper.Map<FieldViewModel, IField>(sourceObject);
當傳入包含必需,最小值或最大值的源類時,這些字段不會映射到新創建的具體類中。
automapper甚至可以做到嗎? 還是我需要自己映射這些字段?
經過更多研究后,看來我缺少的是beforeMap代碼。
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>();
最終不得不為每個派生的具體類創建地圖,但是before地圖會處理確保正確的人被數據映射。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.