我有这样的自动映射器设置
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; }
根据自动映射器文档,我做了以下假设:
Get
的方法但是当我验证automapper扩展名时,我得到了未映射属性的错误
未映射的属性:RoleNames
我的配置中缺少什么,automapper
应该检测到扩展方法。
我尝试过(a)从方法名称中删除GET,但是仍然无法正常工作(b)在CreateMap
之前或之后移动IncludeSourceExtensionMethods
来查看序列是否重要,但是没有一个帮助
答案 0 :(得分:1)
发布问题后几分钟,我仔细查看了Github上的this issue,就得到了答案
问题在于以下声明
IncludeSourceExtensionMethods(typeof(UserGroup));
这里提到的类型应该是扩展类
IncludeSourceExtensionMethods(typeof(UserGroupExtensions));
不删除问题,因为它可能会在将来对某人有所帮助。