首页 > 解决方案 > Automapper 没有使用扩展方法进行映射

问题描述

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

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; }

根据 automapper 文档,我做了以下假设:

  1. IncludeSourceExtensionMethods,包括映射时的扩展方法
  2. 在映射时,它还将寻找带有前缀的方法Get

但是当我验证自动映射器扩展时,我收到未映射属性的错误

未映射的属性:RoleNames

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

我已经尝试(a)从方法名称中删除 GET ,但仍然不起作用(b)CreateMap在 the 之前或之后移动IncludeSourceExtensionMethods以查看序列是否重要,但没有任何帮助。

标签: automapperextension-methods

解决方案


在发布问题后的几分钟内,我通过在 Github 上仔细查看这个问题得到了答案

问题在于以下声明

      IncludeSourceExtensionMethods(typeof(UserGroup));

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

      IncludeSourceExtensionMethods(typeof(UserGroupExtensions));

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


推荐阅读