gpt4 book ai didi

c# - 是否仍有可能调用 mapper.map 的 map ?

转载 作者:行者123 更新时间:2023-11-30 23:29:34 25 4
gpt4 key购买 nike

随着 AutoMapper 4.2 的发布,静态映射器接口(interface)已被淘汰,新的推荐方法是使用 DI/IoC 在需要的地方注入(inject)映射器。

我正在努力将我的项目升级到这个版本,我已经将我的配置移动到 Profile 类的实现中。我遇到的问题是我的一些 map 依赖于能够进行额外的 Map 调用。

以下是有问题的 map :

CreateMap<ProjectEntity, FavoritesNode>()
.ConstructUsing((ProjectEntity src) => Mapper.Map<FavoritesGroupModel>(src))
.IgnoreMember(dest => dest.DisplayValue);

CreateMap<ProjectEntity, FavoritesGroupModel>()
.MapMember(dest => dest.DisplayValue, src => src.ProjectName)
.MapMember(dest => dest.Items, src => src.Tasks);

CreateMap<ProjectTaskEntity, FavoritesNode>()
.ConstructUsing((ProjectTaskEntity src) => Mapper.Map<FavoritesComboItemModel>(src))
.IgnoreMember(dest => dest.DisplayValue);

CreateMap<ProjectTaskEntity, FavoritesComboItemModel>()
.MapMember(dest => dest.DisplayValue, src => src.ProjectTaskName)
.MapMember(dest => dest.Key, src => src.Id)
.IgnoreMember(dest => dest.IsFavorite);

要添加一些上下文,FavoritesComboItemModelFavoritesGroupModel 都继承自 FavoritesNode 并且 ProjectEntity 有一个列表项目任务实体。这些映射用于将相当简单的项目结构调整为收藏夹模型所使用的完全动态的树结构。

那么鉴于此配置,我仍然可以在新实例 api 中进行这些 map 调用吗?

*IgnoreMemberMapMember 是我自己对相应 ForMember 变体的快捷方式扩展。

最佳答案

是的,这很容易。

对于 ConstructUsing 方法,您有一个重载,它接收一个带有 ResolutionContext 参数的 Func。解析上下文有一个 Engine 属性,它包含对当前正在执行映射的映射引擎的引用。

它看起来像这样:

CreateMap<ProjectTaskEntity, FavoritesNode>()
.ConstructUsing( ctx => ctx.Engine.Map<FavoritesComboItemModel>(ctx.SourceValue))
.IgnoreMember(dest => dest.DisplayValue);

还有一个接收映射上下文的 ResolveUsing 重载。

关于c# - 是否仍有可能调用 mapper.map 的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35322770/

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