简体   繁体   English

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

[英]Automapper: Using the structure returned by a custom resolver

With AutoMapper, I am using a ValueResolver that returns a structure like this 使用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
     }
}

I returned a structure because the mapping rules are quite complex and I could not write a custom resolver for each properties as they are related to each other. 我返回了一个结构,因为映射规则非常复杂,我无法为每个属性编写自定义解析器,因为它们彼此相关。

So my idea was to do this in one resolver that return a structure and use itike this 所以我的想法是在一个返回结构并使用它的解析器中执行此操作

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

Unfortunately, this does not work. 不幸的是,这不起作用。

It looks like src.ResolveUsing<MyResolver>() is not returning a structure 看起来像src.ResolveUsing<MyResolver>()没有返回结构

Any help is more than appreciated. 任何帮助都非常感谢。

Thanks. 谢谢。

By using FromMember you can pass a property from the source to your ValueResolver. 通过使用FromMember您可以将属性从源传递到ValueResolver。

You can use something like this: 你可以使用这样的东西:

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

If you don't specify FromMember , AutoMapper will pass the source to your ValueResolver. 如果您未指定FromMember ,AutoMapper会将源传递给您的ValueResolver。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM