首页 > 解决方案 > 避免为单独的成员重复昂贵的方法调用 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 次。它甚至不支持安全导航运算符。

请分享您如何使用来摆脱这种情况。

标签: c#automapper

解决方案


听起来你可以使用一个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应该已经准备好进行映射,具有存在Prop1Prop2分配的属性。

或者您可以在 中使用 memoization SomeMethod(),即对于每个输入,您都会记住输出,并返回后者以进行重复调用。


推荐阅读