Automapper可以忽略void方法吗?

Mar*_*arl 7 automapper

我是Automapper的新手,所以我不确定这是否可行.

我想映射一个类,但让它忽略无效的方法.下面是我所拥有的代码的说明.当我运行它时,我收到以下异常消息.

AutoMapper.dll中出现未处理的"AutoMapper.AutoMapperMappingException"类型异常

不幸的是,它不是一个改变界面的选项,所以我假设如果这是可能的,我缺少某种配置?

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

nem*_*esv 8

如果您使用接口作为目标类型,AutoMapper将为您动态创建实现(代理)类型.

但是,代理生成仅支持属性,因此它会为您的IgnoreMe方法抛出这个不太具描述性的异常.所以你不能忽视你的IgnoreMe方法.

作为一种解决方法,您可以显式指定如何使用其中一个ConstructUsing重载来构造目标对象,在这种情况下,AutoMapper不会生成代理.

Mapper.CreateMap<IThing, IThing>()
      .ConstructUsing((ResolutionContext c) => new Foo());
Run Code Online (Sandbox Code Playgroud)

或者除非你没有充分的理由,否则你可以直接映射到 Foo

Mapper.CreateMap<IThing, Foo>();
Run Code Online (Sandbox Code Playgroud)