gpt4 book ai didi

automapper - Automapper 可以忽略 void 方法吗?

转载 作者:行者123 更新时间:2023-12-04 11:39:35 25 4
gpt4 key购买 nike

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

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

An unhandled exception of type 'AutoMapper.AutoMapperMappingException' occurred in 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();
}
}

最佳答案

如果您正在使用 an interface as a destination type AutoMapper 将为您动态创建一个实现(代理)类型。

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

作为一种解决方法,您可以使用 ConstructUsing 之一明确指定应如何构造目标对象。在这种情况下,AutoMapper 不会生成代理。

Mapper.CreateMap<IThing, IThing>()
.ConstructUsing((ResolutionContext c) => new Foo());

或者除非你没有充分的理由,你可以直接映射到 Foo
Mapper.CreateMap<IThing, Foo>();

关于automapper - Automapper 可以忽略 void 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17243693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com