использование System.Введите как TSource, TTarget в AutoMapper

#c# #automapper

#c# #automapper

Вопрос:

Я должен определить несколько собственных сопоставлений в AutoMapper, это около 50 сопоставлений.

Я добавил их в список

 var alphabeticallySortedTypes = new List<Type>()
{
    typeof(AmtType),
    typeof(AnyCountType),
    //some more
}
  

И я пытаюсь добавить их в foreach:

 AutoMapper.Mapper.CreateProfile("SelfCollectionMapping");
foreach(var alphabeticallySortedType in alphabeticallySortedTypes)
{
    AutoMapper.Mapper.CreateMap<alphabeticallySortedType, alphabeticallySortedType> ()
    .WithProfile("SelfCollectionMapping")
}
  

Ошибка, которую я получаю,

alphabeticallySortedType является переменной, но используется как тип.

Есть идеи о том, как я могу обойти это?

Ответ №1:

Вам необходимо передать объекты типа в качестве параметров методу CreateMap .

 Mapper.CreateMap(alphabeticallySortedType, alphabeticallySortedType);
  

Комментарии:

1. Я определил метод расширения public static IMappingExpression<TSource, TDestination> MapAllFieldsWhenTargetIsEmpty<TSource, TDestination>(это IMappingExpression<TSource, TDestination> MappingExpression), который недоступен, если я это сделаю

2. Вам придется переписать все, чтобы работать с нестандартным интерфейсом.

3. Главное, чтобы оттуда я получал доступ к ForAllMembers, который недоступен с использованием не общего метода

4. Да, возможно, вам нужно обновить AM.