簡體   English   中英

Automapper是否可以將字段映射到具體類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM