C# 自动映射:使用自定义解析器返回的结构
对于AutoMapper,我使用的是一个ValueResolver,它返回如下结构C# 自动映射:使用自定义解析器返回的结构,c#,automapper,C#,Automapper,对于AutoMapper,我使用的是一个ValueResolver,它返回如下结构 struct MyStruct { public int propA; public int propB; public int propC; } class MyResolver : ValueResolver<MyViewModel, MyStruct> { protected override MyStruct ResolveCore
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
}
}
struct MyStruct
{
公共国际宣传;
公共int propB;
公共int propC;
}
类MyResolver:ValueResolver
{
受保护的覆盖MyStruct ResolveCore(MyViewModel源)
{
..返回MyStruct数据
}
}
我返回了一个结构,因为映射规则非常复杂,我无法为每个属性编写自定义解析器,因为它们彼此相关
所以我的想法是在一个解析器中完成这项工作,该解析器返回一个结构并像这样使用它
AutoMapper.Mapper.CreateMap<MyViewModel, myData>()
.ForMember(dest => dest.SomePropA, src => src.ResolveUsing<MyResolver>().propA))
.ForMember(dest => dest.SomePropB, src => src.ResolveUsing<MyResolver>().propB))
AutoMapper.Mapper.CreateMap()
.FormMember(dest=>dest.SomePropA,src=>src.resolvesusing().propA))
.FormMember(dest=>dest.SomePropB,src=>src.resolvesusing().propB))
不幸的是,这不起作用
看起来src.ResolveUsing()
没有返回结构
任何帮助都不胜感激
谢谢。使用
FromMember
可以将源属性传递给ValueResolver
您可以使用以下内容:
.ForMember(dest => dest.SomePropA, opt=> opt.ResolveUsing<MyResolver>().FromMember(src => src.propA))
.formmember(dest=>dest.SomePropA,opt=>opt.resolvusing().FromMember(src=>src.propA))
如果未指定
FromMember
,AutoMapper将把源代码传递给您的ValueResolver。这将不起作用,FromMember将值传递给resolver,它不允许您从resolver结果中指定所需的成员。。。除非您可以在解析器中添加一个讨厌的开关大小写
,并根据输入值返回一些内容