我是Automapper的新手,所以我不确定这是否可行。
我想映射一个类,但要忽略无效的方法。下面是我所拥有的代码的说明。当我运行它时,我收到以下异常消息。
“AutoMapper.AutoMapperMappingException”类型的未处理异常 发生在AutoMapper.dll
中
不幸的是,它不是一个更改界面的选项,所以我假设如果可能的话,我会缺少某种配置?
public interface IThing
{
string Name { get; set; }
void IgnoreMe();
}
public class Foo : IThing
{
public string Name { get; set; }
public void IgnoreMe()
{
}
}
class Program
{
static void Main(string[] args)
{
var fooSource = new Foo {Name = "Bobby"};
Mapper.CreateMap<IThing, IThing>();
var fooDestination = Mapper.Map<IThing>(fooSource);
Console.WriteLine(fooDestination.Name);
Console.ReadLine();
}
}
答案 0 :(得分:8)
如果您使用的是an interface as a destination类型,AutoMapper将为您动态创建一个实现(代理)类型。
然而代理生成仅支持属性,因此它会为您的IgnoreMe
方法抛出这个不太具描述性的异常。因此,您无法忽略IgnoreMe
方法。
作为一种解决方法,您可以明确指定如何使用ConstructUsing
重载中的一个来构造目标对象,在这种情况下,AutoMapper不会生成代理。
Mapper.CreateMap<IThing, IThing>()
.ConstructUsing((ResolutionContext c) => new Foo());
除非您没有充分的理由,否则您可以直接映射到Foo
Mapper.CreateMap<IThing, Foo>();