我正在努力研究如何从Foo
填充FooConfig
:
class Bar
{
int A;
int B;
}
class Foo
{
Bar BarValues;
Bar BarErrorValues;
}
class FooConfig
{
int A;
int B;
int AError;
int BError;
}
FooConfig
基本上是Foo
的扁平版本。
我可以使用AutoMapper轻松填充BarValues
(通过为FooConfig
定义到Bar
的地图),但我无法填充BarErrorValues
- 所有内容我最后尝试使用A
和B
值,而不是AError
和BError
值。
我怀疑我需要使用“变形金刚”或RecognizePostfixes
(虽然这似乎不起作用,因为我尝试过)。
答案 0 :(得分:1)
这应该“开箱即用”:
Mapper.CreateMap<FooConfig, Foo>()
.ForMember(d => d.BarValues, o => o.MapFrom(s => new Bar { A = s.A, B = s.B }))
.ForMember(d => d.BarErrorValues, o => o.MapFrom(s => new Bar {A = s.AError, B = s.BError}));
答案 1 :(得分:0)
我想我发现了这个问题。看来如果AutoMapper找到完全匹配,则永远不会使用名称转换器。 Bugger :(这是显示它的AutoMapper源代码:
private static MemberInfo FindTypeMember(IEnumerable<MemberInfo> modelProperties, IEnumerable<MethodInfo> getMethods, string nameToSearch, IMappingOptions mappingOptions)
{
MemberInfo pi = modelProperties.FirstOrDefault(prop => NameMatches(prop.Name, nameToSearch));
if (pi != null)
return pi;
...
pi = modelProperties.FirstOrDefault(prop => NameMatches(mappingOptions.SourceMemberNameTransformer(prop.Name), nameToSearch));
if (pi != null)
return pi;