AutoMapper 版本之间的差异?

时间:2021-03-25 09:02:16

标签: c# automapper

我使用的是 AutoMapper 6.2.2。

我有两门课:

public class BBB
{
    public int b { get; set; }
}


public class AAA
{
    public int a { get; set; }
}

请注意,它们具有不同的属性名称。

当我编写一个使用 AAA -> BBB 之间的映射的简单控制台应用程序时,我没有收到异常:

var a = new AAA();
var b = new BBB();

var config = new MapperConfiguration(cfg => cfg.CreateMap<AAA, BBB>());
var mapper = config.CreateMapper();
var dto = mapper.Map<BBB>(a);
Console.WriteLine(dto); //{b=0}

(没有例外)。

但是,如果我将 .Net Core 与:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddAutoMapper();
        Mapper.AssertConfigurationIsValid();
        services.AddControllers();
    }

然后在控制器中:

[HttpGet]
public object Get()
    {
        var a = new AAA();
        var t = _mapper.Map<AAA, BBB>(a);
        return t;
    }

然后,我确实看到了异常:

<块引用>

AutoMapper.AutoMapperConfigurationException:未映射的成员是 成立。查看下面的类型和成员。添加自定义映射 表达式、忽略、添加自定义解析器或修改 源/目标类型对于没有匹配的构造函数,添加一个无参数 ctor,添加可选参数,或映射所有构造函数参数 ============ AAA -> BBB(目的地会员名单)AAA -> BBB(目的地会员名单)

未映射的属性:b

问题:

为什么我会在第二种情况下看到异常? (虽然没有出现在第一种情况

1 个答案:

答案 0 :(得分:2)

您看到的差异是由于您自己的实施方式不同造成的。

一开始是猜测,后来被OP证实了,所以是这样的:

控制台版本没有使用 Mapper.AssertConfigurationIsValid(); 导致无效配置失败,没有它,AutoMapper 默默地隐藏了失败。

另外,有人问即使没有 Mapper.AssertConfigurationIsValid(); 方法,在 NET Core 版本中 AutoMapper 也会失败。我的猜测是 AutoMapper 作者决定不隐藏配置失败并在新版本中实现它,因此当应用无效映射时它会失败。

相关问题