具有多个目标类型的自动映射器

本文关键字:映射 类型 目标 | 更新日期: 2023-09-27 18:30:33

我正在尝试使用自动映射器将源类型映射到两个目标类型:

public class Source
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
    public Source[] Values { get; set; }
}
public interface IDest
{
}
public class DestinationSimple : IDest
{
    public string Value1 { get; set; }
}
public class DestinationComplex : IDest
{
    public string Value2 { get; set; }
    public IDest[] Values { get; set; }
}

要映射到的目标类型应基于源类型中的属性值。如果源中的值 1 不为空,则目标类型应为目标简单。否则,目标类型应为"目标复杂"。

哪种方式最好?我尝试使用自定义类型转换器,但由于我不知道如何处理 Values 属性,因此无法使其工作。

具有多个目标类型的自动映射器

以下是使用自定义类型转换器执行此操作的一种方法:

public class IDestConverter : TypeConverter<Source, IDest>
{
    protected override IDest ConvertCore(Source src)
    {
        IDest result = null;
        if (src.Value1 != null)
        {
            result = new DestinationSimple
            {
                Value1 = src.Value1
            };
        }
        else 
        {
            result = new DestinationComplex
            {
                Value2 = src.Value2,
                Values = Mapper.Map<IDest[]>(src.Values)
            };
        }
        return result;
    }
}

用法:

Mapper.CreateMap<Source, IDest>()
    .ConvertUsing<IDestConverter>();