将不同的具体类型映射到接口集合

Map Different Concrete Types to Collection of Interface

我很难将不同的具体类型映射到自动映射器中的单个接口集合。例如:

域:

public interface INameInterface {
    string Name;
}

public class FullName: INameInterface {
    string Name;
}

public class FirstNameOnly: INameInterface {
    string Name;
}

public class MyDomain {
    List<INameInterface> Names;
}

DTO:

public class NameDTO {
    int NameType;
    string Name;
}

public class MyDTO {
    List<NameDTO> NameDTOs;
}

我想将 MyDTO 映射到 MyDomain。我想通过其 NameType 解析 NameDTO 并将 NameTypes 1 映射到 Fullname 并将 2 映射到 FirstNameOnly 具体 类 并将它们放在 MyDomain.Names 集合中。我怎样才能在自动映射器中做到这一点。

非常感谢任何帮助。

PS。示例已简化

这可以使用自定义类型转换器解决。

在自动映射器配置中:

cfg.CreateMap<NameDTO, INameInterface>()
                    .ConvertUsing<SomeConverter>();

然后创建自定义转换器class。

public class SomeConverter : ITypeConverter<NameDTO, INameInterface>
{
    public INameInterface Convert(NameDTO source, INameInterface destination, ResolutionContext context)
    {
        if (source.NameType == 0)
        {
            return context.Mapper.Map<FullName>(source);
        }
        if (source.NameType == 1)
        {
            return context.Mapper.Map<FirstNameOnly>(source);
        }

        return context.Mapper.Map<FirstNameOnly>(source);
    }
}

只需为每个具体类型添加必要的映射。

警告,我曾尝试在投影中使用这种方法,但这行不通,因为它无法转换为表达式。