AutoMapper 根据条件映射到派生类

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

我想根据源中的属性值将基类映射到多个派生类之一。到目前为止我已经有了这个,但它看起来有点笨拙和丑陋。有更好的办法吗?

Mapper.CreateMap<DTO.BaseData, BaseData>()
                .ConstructUsing(src =>
                {
                    switch (src.Type)
                    {
                        case 0:
                            return new FtpData(src.Id, src.Content);

                        // many more case statements in here.....

                    }

                    return new NullData();
                });
automapper
1个回答
0
投票

您走在正确的道路上。尽管在 switch 语句中,我建议您针对特定类型使用映射器语句。您可以通过使用

ConstructUsing

中的上下文来做到这一点

使用 C# 8.0 或更高版本,您也可以简化 switch 语句

Mapper.CreateMap<DTO.BaseData, BaseData>()
        .ConstructUsing((src,context) => src.Type switch
        {
            0 => context.Mapper.Map<FtpData>()
            1 -> context.Mapper.Map<FooBar>()
            _ => throw new ArgumentOutOfRangeException($"Unexpected Type {src.Type}"
        });
© www.soinside.com 2019 - 2024. All rights reserved.