Automapper не использует методы расширения для отображения - PullRequest
1 голос
/ 18 мая 2019

У меня автоматическая настройка, подобная этой

services.AddAutoMapper(typeof(MappingAssembly).Assembly, typeof(AssemblyWithExtensionMethods).Assembly);

И в одном из моих профилей

public class UserModuleMapper : Profile {
  public UserModuleMapper() {
    IncludeSourceExtensionMethods(typeof(UserGroup));
    CreateMap<UserGroup, UserGroupDto>(MemberList.Destination);              
  }
}

И я определил метод расширения как

public static List<string> GetRoleNames(this UserGroup group) {
  return group.UserGroupRoles.Select(x => x.Role.Name).ToList();
}

У меня есть свойство в DTO, определенное как

public List<string> RoleNames { get; set; }

В соответствии с документацией к автомату, я сделал следующие предположения:

  1. IncludeSourceExtensionMethods, которые включают методы расширения при отображении
  2. при отображении он также будет искать методы с префиксом Get

Но когда я проверяю расширение автоматического средства, я получаю ошибку для несопоставленного свойства

Несопоставленные свойства: RoleNames

Чего не хватает в моей конфигурации, automapper должен определить метод расширения.

Я пытался (а) удалить GET из имени метода, но все равно не работает (б) передвигать CreateMap до или после IncludeSourceExtensionMethods, чтобы увидеть, имеет ли значение последовательность, но ничего из этого не помогло.

1 Ответ

1 голос
/ 18 мая 2019

Через несколько минут после публикации вопроса я получил ответ, внимательно взглянув на этот вопрос на Github

Проблема была с приведенным ниже утверждением

      IncludeSourceExtensionMethods(typeof(UserGroup));

тип, упомянутый здесь, должен иметь класс расширения

      IncludeSourceExtensionMethods(typeof(UserGroupExtensions));

Не удаляя вопрос, так как это может помочь кому-то в будущем.

...