AutoMapper Custom Resolver с многопольным ключомC#

Место общения программистов C#
Anonymous
AutoMapper Custom Resolver с многопольным ключом

Сообщение Anonymous »

Я прочитал документацию AutoMapper и подобные темы, но я либо сбит с толку, либо зашел в тупик, поэтому обращаюсь к своей любимой группе экспертов;)
У меня есть таблица поиска, которая Я загружаю словарь для использования в CustomResolver. keyValue1 + keyValue2 — мой «ключ».

Код: Выделить всё

public class myLookUpEntity
{
public string keyValue1 { get; set; }
public string keyValue2 { get; set; }
public string CodeLookup { get; set; }
}
Это загружается в словарь. Загрузка осуществляется с помощью шаблона IOptions для загрузки таблицы в память.
Я пытаюсь сопоставить два разных исходных объекта с одним и тем же целевым объектом, используя что-то вроде этого

Код: Выделить всё

.ForMember(dest => dest.targetField, opt => opt.MapFrom(src => src.sourceField1.PadRight(14)))
and
.ForMember(dest => dest.targetField, opt => opt.MapFrom(src => "".PadRight(10) + src.sourceField2.PadRight(4)))
Результирующий «ключ» поиска состоит из 14 символов, передаваемых в преобразователь. Вот код преобразователя

Код: Выделить всё

public class LookupTable
{
public IDictionary LookupEntries { get; set; }
}

public class MyLookupResolver : IMemberValueResolver
{
private readonly LookupTable myLookupTable;

public MyLookupResolver()
{
// This constructor is only used by XUnit Tests
this.myLookupTable = new LookupTable() { LookupEntries = new Dictionary() { } };
}

public MyLookupResolver(IOptions myTable)
{
this.myLookupTable = myTable.Value;
}

public string Resolve(object source, object destination, string keyValue, string resultValue, ResolutionContext context)
{
resultValue = "";

if (myLookupTable.LookupEntries.TryGetValue(keyValue, out myLookupEntity value))
resultValue = value.CodeLookup;

return resultValue;
}
}
Единственная проблема в том, что это не работает. Я не могу понять, как передать два исходных значения преобразователю и позволить ему сформировать ключ. Также я получаю это исключение

Типы сопоставления ошибок.
Типы сопоставления: sourceObject1 -> destObject
.sourceObject1 ->
.destObject
Конфигурация карты типов: sourceObject1 -> destObject
.sourceObject1 ->
.destObject
Целевой элемент: targetField

Надеюсь, этой информации достаточно, чтобы направить меня на правильный путь.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -field-key

Вернуться в «C#»