c# - 避免为单独的成员重复昂贵的方法调用 Automapper
问题描述
谁能帮我避免这种情况,
CreateMap<Obj, ObjDTO>()
.ForMember(d => d.Prop1, opt => opt.MapFrom(src => SomeMethod(src) == null ? null : SomeMethod(src).Prop1))
.ForMember(d => d.Prop2, opt => opt.MapFrom(src => SomeMethod(src) == null? null : SomeMethod(src).Prop2));
对于 2 个简单的属性,这里SomeMethod
几乎需要调用 4 次。它甚至不支持安全导航运算符。
请分享您如何使用来摆脱这种情况。
解决方案
听起来你可以使用一个AfterMap
动作:
CreateMap<Obj, ObjDTO>()
.ForMember(...)
.AfterMap((src, dest) =>
{
var foo = SomeMethod(src);
if (foo == null)
{
return;
}
dest.Prop1 = foo.Prop1;
dest.Prop2 = foo.Prop2;
});
但是这样做的需要可能是由于您想在映射代码中做太多事情。最终,src
应该已经准备好进行映射,具有存在Prop1
和Prop2
分配的属性。
或者您可以在 中使用 memoization SomeMethod()
,即对于每个输入,您都会记住输出,并返回后者以进行重复调用。
推荐阅读
- java - 无法自动装配类,响应为空
- go - 使用golang将数据保存在txt文件中
- c# - 如何使用来自不同表的多个外键为表提供数据
- python - 基于先前行的 Dataframe 计算速度非常慢
- dependencies - 未找到 IPFS 存储库 haadcode/ipfs-pubsub-room.git
- inversion-of-control - Windows 社区工具包 IoC :: 是吗 || 是否能够添加其他供应商或自己的 IoC 模块?
- javascript - Javascript Hangman Game 仅填充单词中第一次出现的重复字母
- django - 不同组织中的Django相同的用户名
- c++ - 如何向向量添加类函数(即“nortmalVector.customFunction()”)
- python - cygwin 上的 PyInstaller