我有要映射的类,但它们没有默认的构造函数,我不希望它们有。这是因为我只映射到现有对象/从现有对象映射。
public class Order
{
public string OrderName { get; set; }
public Order(string name)
{
this.OrderName = name;
}
}
public class OrderProcessor
{
private IService service;
public string OrderName { get; set; }
public OrderProcessor(IService service)
{
this.service = service;
Mapper.Initialize(config => config.CreateMap<Order, OrderProcessor>());
}
public void Init()
{
var order = this.service.GetOrder();
// this works
Mapper.Map(order, this);
// this fails
Mapper.Configuration.AssertConfigurationIsValid();
}
}
AutoMapper.AutoMapperConfigurationException:未映射的成员是 找到。查看下面的类型和成员。添加自定义映射 表达式,忽略,添加自定义解析程序或修改 源/目标类型对于没有匹配的构造函数,添加一个无参数 ctor,添加可选参数,或映射所有构造函数参数
订单 - &gt; OrderProcessor(目标成员列表)
没有可用的构造函数。
在Tests.cs中的Test()行:
当我不想创建新对象时,如何使配置断言传递及其失败的原因?
答案 0 :(得分:11)
我最近在从Automapper 4.x升级到6.x之后偶然发现了这个问题。
您需要通过调用CreateMap<TSource, TDest>().DisableCtorValidation()
告诉AutoMapper您不打算让它构建目标类型。
根据方法文档:
// Summary:
// Disable constructor validation. During mapping this map is used
// against an existing destination object and never constructed itself.
//
答案 1 :(得分:0)
您需要使用.ConstructUsing(),因为您的类型没有无参数构造函数...
就像这样;
Mapper.Initialize(config =>
config.CreateMap<Order, OrderProcessor>()
.ConstructUsing(x => new OrderProcessor(new WhateverService()));
);
您可能显然需要使用您正在使用的任何DI框架解决WhateverService ....