Automapper:使用自定义解析器返回的结构体

4
使用AutoMapper时,我正在使用一个ValueResolver返回以下结构的内容。
struct MyStruct
{
        public int propA;
        public int propB;
        public int propC;
}

class MyResolver : ValueResolver<MyViewModel, MyStruct>
{ 
     protected override MyStruct ResolveCore(MyViewModel source)
     {
      ....return MyStruct data
     }
}

由于映射规则非常复杂,并且我无法为每个属性编写自定义解析器,因此我返回了一个结构体。这些属性彼此相关。

所以我的想法是在一个解析器中完成这个过程,并返回一个结构体,然后像这样使用它

AutoMapper.Mapper.CreateMap<MyViewModel, myData>()
    .ForMember(dest => dest.SomePropA, src => src.ResolveUsing<MyResolver>().propA))
    .ForMember(dest => dest.SomePropB, src => src.ResolveUsing<MyResolver>().propB))

很遗憾,这并不起作用。

看起来src.ResolveUsing<MyResolver>()没有返回一个结构体

非常感谢任何帮助。

谢谢。

1个回答

8

通过使用 FromMember,您可以将源中的属性传递给您的 ValueResolver。

您可以使用以下代码:

.ForMember(dest => dest.SomePropA, opt=> opt.ResolveUsing<MyResolver>().FromMember(src => src.propA))

如果您没有指定FromMember,AutoMapper将把源对象传递给您的ValueResolver。

这样做不行,FromMember将一个值传递给解析器,它不允许您指定您需要从解析器结果中获取的成员...除非您可以在解析器中添加一个恶心的switch case,根据输入值返回某些内容。 - janv8000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接