我正在使用AutoMapper,并且希望它根据映射(拼合)的目标属性的名称追溯源属性。如何使用AutoMapper根据拼合属性的名称查找源属性
这是因为我的MVC控制器有一个映射属性的名称,它需要提供给用于排序目的的服务调用。该服务需要知道映射源自的属性的名称(并且控制器不应该知道该属性),以便对实际对数据进行排序的存储库执行正确的调用。
例如:
[Source.Address.ZipCode]映射到[Destination.AddressZipCode]
然后
跟踪 “AddressZipCode” 回[Source.Address .ZipCode]
这是什么东西th在AutoMapper可以为我做,还是我需要挖掘到AutoMapper的映射数据?
UPDATE
吉米·博加德告诉我,这应该是可能的,但不是明显的方式。它需要加载类型映射并通过它。我已经简要地研究了它,但似乎我需要访问内部类型以获取执行反向映射所需的属性映射信息。
更新2
我已经决定提供一些更多的细节。
当我加载了类型映射,我发现有在这两个源值解析器的隐含邮编映射:
- 一个
AutoMapper.Internal.PropertyGetter
是获取地址。 - a
AutoMapper.Internal.PropertyGetter
获取ZipCode。
当我有一个明确的映射(有指定的lambda表达式),我觉得没有源值解析器,但是自定义解析:
- 一个
AutoMapper.DelegateBasedResolver<Company,string>
,我认为对我的显式映射lambda表达式。
不幸的是,这些解析器是内部的,所以我只能通过反射(我真的不想这么做)或通过改变AutoMapper源代码来访问它们。
如果我可以访问它们,我可以通过遍历值解析器或通过检查自定义解析器来解决问题,尽管我怀疑这会导致我返回映射lambda表达式,而我需要构建unflattened属性名称(实际上是由点分隔的一系列属性名称)。
你在说什么flatenning/unflattening? – Omu 2010-08-04 12:17:51
@欧姆:是的,我的意思是我想解除属性名称,而不是整个对象。我发现你与ValueInjecter有关系,但是我希望在这种情况下保持在AutoMapper领域。 – 2010-08-04 12:54:18
好吧,Automapper无法做到这一点,但我在做ValueInjecter解锁时做到了这一点 – Omu 2010-08-04 13:37:43