如何构建 AutoMapper 映射以在目标 class 构造函数中传递参数
How to build AutoMapper mapping to pass parameter in destination class constructor
如果我有这套源怎么办类:
namespace Source {
class CA
{
public CB B { get; set; }
}
class CB {}
}
类的destination set唯一的区别是CB在constructor中接受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);
这样我就可以让整个映射保持静态。
我个人不喜欢这个解决方案,但它确实有效。不过,如果你知道更好的,请告诉我。
如果我有这套源怎么办类:
namespace Source {
class CA
{
public CB B { get; set; }
}
class CB {}
}
类的destination set唯一的区别是CB在constructor中接受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);
这样我就可以让整个映射保持静态。 我个人不喜欢这个解决方案,但它确实有效。不过,如果你知道更好的,请告诉我。