AutoMapper 版本之间的差异?
AutoMapper differences between versions?
我正在使用 AutoMapper 6.2.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: Unmapped members were
found. Review the types and members below. Add a custom mapping
expression, ignore, add a custom resolver, or modify the
source/destination type For no matching constructor, add a no-arg
ctor, add optional arguments, or map all of the constructor parameters
=========== AAA -> BBB (Destination member list) AAA -> BBB (Destination member list)
Unmapped properties: b
问题:
为什么我在第二种情况下看到异常? (虽然没有出现在第一个案例中)
您看到的不同是由于您自己的实现不同。
一开始是猜测,后来被OP证实,所以这里是:
控制台版本没有使用Mapper.AssertConfigurationIsValid();
导致无效配置失败,没有它,AutoMapper默默地隐藏了失败。
此外,有人问即使没有 Mapper.AssertConfigurationIsValid();
方法,在 NET Core 版本中 AutoMapper 也会失败。我的猜测是 AutoMapper 作者决定不隐藏配置失败并在新版本中实现它,因此在应用无效映射时它会失败。
我正在使用 AutoMapper 6.2.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: Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type For no matching constructor, add a no-arg ctor, add optional arguments, or map all of the constructor parameters =========== AAA -> BBB (Destination member list) AAA -> BBB (Destination member list)
Unmapped properties: b
问题:
为什么我在第二种情况下看到异常? (虽然没有出现在第一个案例中)
您看到的不同是由于您自己的实现不同。
一开始是猜测,后来被OP证实,所以这里是:
控制台版本没有使用Mapper.AssertConfigurationIsValid();
导致无效配置失败,没有它,AutoMapper默默地隐藏了失败。
此外,有人问即使没有 Mapper.AssertConfigurationIsValid();
方法,在 NET Core 版本中 AutoMapper 也会失败。我的猜测是 AutoMapper 作者决定不隐藏配置失败并在新版本中实现它,因此在应用无效映射时它会失败。