Я использую AutoMapper, и мне бы хотелось, чтобы он отслеживал исходное свойство на основе имени сопоставленного (сплющенного) целевого свойства.
Это связано с тем, что у моего контроллера MVC есть имя сопоставленного свойства, которое необходимо предоставить вызову службы для сортировки. Службе необходимо знать имя свойства, из которого было получено сопоставление (и контроллер не должен его знать), чтобы выполнить правильный вызов хранилища, которое фактически сортирует данные.
Например:
[Source.Address.ZipCode] отображается на [Destination.AddressZipCode]
Тогда
Трассировка "AddressZipCode" обратно в [Source.Address.ZipCode]
Это то, что AutoMapper может сделать для меня, или мне нужно прибегнуть к копанию в данных сопоставления AutoMapper?
UPDATE
Джимми Богард сказал мне, что это должно быть возможно, но не очевидным образом. Это требует загрузки карты типов и прохождения через нее. Я кратко рассмотрел его, но, похоже, мне нужен доступ к внутренним типам, чтобы получить информацию о сопоставлении свойств, которая требуется для обратного сопоставления.
ОБНОВЛЕНИЕ 2
Я решил предоставить более подробную информацию.
Когда я загружаю карту типов, я обнаруживаю, что в ней есть два преобразователя значений источника для неявного отображения ZipCode:
- a
AutoMapper.Internal.PropertyGetter
, который получает адрес.
- a
AutoMapper.Internal.PropertyGetter
, который получает ZipCode.
Когда у меня есть явное сопоставление (для которого задано лямбда-выражение), я не нахожу никакого распознавателя исходного значения, а пользовательского распознавателя:
- a
AutoMapper.DelegateBasedResolver<Company,string>
, который, как мне кажется, содержит мое явное отображение лямбда-выражения.
К сожалению, эти средства распознавания являются внутренними, поэтому я могу получить к ним доступ только через отражение (что я действительно не хочу делать) или путем изменения исходного кода AutoMapper.
Если бы я мог получить к ним доступ, я мог бы решить эту проблему, либо просматривая распознаватели значений, либо проверяя пользовательский распознаватель, хотя я сомневаюсь, что это вернуло бы меня к отображению лямбда-выражения, которое мне нужно, чтобы построить неразглашенное имя свойства (фактически набор имен свойств, разделенных точками).