gpt4 book ai didi

automapper - 如何构建 AutoMapper 映射以在目标类构造函数中传递参数

转载 作者:行者123 更新时间:2023-12-01 23:31:05 26 4
gpt4 key购买 nike

如果我有这组源类怎么办:

namespace Source {

class CA
{
public CB B { get; set; }
}

class CB {}

}

目标类集的唯一区别是CB在构造函数中接受CA引用(CA具有相同的结构):

namespace Destination {

class CA
{
public CB B { get; set; }
}

class CB
{
public CB(CA parent) { ... }
}
}

如何使用 AutoMapper 为此类类构建静态映射?我的意思是对整个应用程序运行一次的东西,而不是每个 CA、CB 实例。

我知道我可以在每个具有 CA 目标实例的映射之前动态地这样做:

var config = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers);

config.CreateMap<Source.CB, Destination.CB>()
.ConstructUsing((ResolutionContext cntx) =>
new Destination.CB(instanceOfCADestination));

但由于性能问题,这对我不起作用。

最佳答案

除了在映射之前实例化 CA,将其存储到 IMappingOperationOptions.Options.Items 集合并在 ConstructUsing 中获取之外,没有找到更好的方法

Mapper.CreateMap<Source.CB, Destination.CB>()
.ConstructUsing(cntx =>
new Destination.CB((Destination.CA)cntx.Options.Items["CADestRef]));

var destCAInstance = new Destination.CA();

var destCBInstance =
Mapper.Map<Destination.CB>(Source.CB,
opts => opts.Items["CADestRef"] = destCAInstance);

这样我就可以让整个映射保持静态。我个人不喜欢这个解决方案,但它确实有效。不过,如果您知道更好的,请告诉我。

关于automapper - 如何构建 AutoMapper 映射以在目标类构造函数中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35583828/

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