Automapper没有使用扩展方法进行映射

时间:2019-05-18 11:53:43

标签: automapper extension-methods

我有这样的自动映射器设置

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的方法

但是当我验证automapper扩展名时,我得到了未映射属性的错误

  

未映射的属性:RoleNames

我的配置中缺少什么,automapper应该检测到扩展方法。

我尝试过(a)从方法名称中删除GET,但是仍然无法正常工作(b)在CreateMap之前或之后移动IncludeSourceExtensionMethods来查看序列是否重要,但是没有一个帮助

1 个答案:

答案 0 :(得分:1)

发布问题后几分钟,我仔细查看了Github上的this issue,就得到了答案

问题在于以下声明

      IncludeSourceExtensionMethods(typeof(UserGroup));

这里提到的类型应该是扩展类

      IncludeSourceExtensionMethods(typeof(UserGroupExtensions));

不删除问题,因为它可能会在将来对某人有所帮助。