【问题标题】:Automapper: Using the structure returned by a custom resolverAutomapper:使用自定义解析器返回的结构
【发布时间】:2011-03-20 12:38:47
【问题描述】:

使用 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&lt;MyResolver&gt;() 没有返回结构

非常感谢任何帮助。

谢谢。

【问题讨论】:

    标签: c# automapper


    【解决方案1】:

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

    你可以这样使用:

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

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

    【讨论】:

    • 这行不通,FromMember 将值 传递给 解析器,它不允许你指定你需要的成员 from 解析器结果...除非您可以在解析器中添加讨厌的switch case,否则会根据输入值返回一些东西
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 2014-04-10
    • 2019-11-21
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多