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

问题描述 投票:1回答:1

我很难将不同的具体类型映射到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。示例已简化

c# .net automapper dto
1个回答
1
投票

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

在自动映射器配置中:

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.NameType == 1)
        {
            return context.Mapper.Map<FirstNameOnly>(source);
        }

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

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

警告,我尝试在投影中使用这种方法,但是由于无法将其转换为表达式,因此无法使用。

© www.soinside.com 2019 - 2024. All rights reserved.