自动映射:使用自定义解析程序返回的结构

时间:2011-03-20 12:38:47

标签: c# automapper

使用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 个答案:

答案 0 :(得分:8)

使用FromMember,您可以将属性从源传递到ValueResolver。

您可以使用以下内容:

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

如果您未指定FromMember,AutoMapper会将来源传递给您的ValueResolver。