我很难将不同的具体类型映射到automapper中的单个接口集合。例如:
域:
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>();
然后创建自定义转换器类。
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.FilterTypeId == 1)
{
return context.Mapper.Map<FirstNameOnly>(source);
}
return context.Mapper.Map<FirstNameOnly>(source);
}
}
只需为每种具体类型添加必要的映射。
警告,我尝试在投影中使用这种方法,但是由于无法将其转换为表达式,因此无法使用。