Automapper 没有使用扩展方法进行映射
Automapper isn't using extension methods for mapping
我有这样的自动映射器设置
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; }
根据自动映射器文档,我做了以下假设:
- IncludeSourceExtensionMethods,映射时包含扩展方法
- 映射时它还会查找前缀为
Get
的方法
但是当我验证自动映射器扩展时,我收到未映射的错误 属性
Unmapped properties: RoleNames
我的配置中缺少什么,automapper
应该检测扩展方法。
我已尝试 (a) 从方法名称中删除 GET,但仍然无效 (b) 在 IncludeSourceExtensionMethods
之前或之后移动 CreateMap
以查看顺序是否重要,但是 none 有帮助。
发布问题几分钟后,我通过仔细查看 Github
上的 this issue 得到了答案
问题出在以下语句
IncludeSourceExtensionMethods(typeof(UserGroup));
这里提到的类型应该是后缀class
IncludeSourceExtensionMethods(typeof(UserGroupExtensions));
不删除问题,因为它可能对将来的人有所帮助。
我有这样的自动映射器设置
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; }
根据自动映射器文档,我做了以下假设:
- IncludeSourceExtensionMethods,映射时包含扩展方法
- 映射时它还会查找前缀为
Get
的方法
但是当我验证自动映射器扩展时,我收到未映射的错误 属性
Unmapped properties: RoleNames
我的配置中缺少什么,automapper
应该检测扩展方法。
我已尝试 (a) 从方法名称中删除 GET,但仍然无效 (b) 在 IncludeSourceExtensionMethods
之前或之后移动 CreateMap
以查看顺序是否重要,但是 none 有帮助。
发布问题几分钟后,我通过仔细查看 Github
上的 this issue 得到了答案问题出在以下语句
IncludeSourceExtensionMethods(typeof(UserGroup));
这里提到的类型应该是后缀class
IncludeSourceExtensionMethods(typeof(UserGroupExtensions));
不删除问题,因为它可能对将来的人有所帮助。