C# 在AutoMapper 6中创建自定义成员解析程序实例时出错

C# 在AutoMapper 6中创建自定义成员解析程序实例时出错,c#,asp.net-web-api,asp.net-core,automapper,C#,Asp.net Web Api,Asp.net Core,Automapper,我正在使用AutoMapper 6(AutoMapper.Extensions.Microsoft.DependencyInjection)在.net核心web api应用程序中映射数据和视图模型。我在视图模型上有一个age属性,并使用自定义解析器根据数据模型的出生日期计算年龄 以下是我在StartupClass中添加AutoMapper的方式: services.AddAutoMapper(config => config.AddProfile(new AutoMapperProfile

我正在使用AutoMapper 6(AutoMapper.Extensions.Microsoft.DependencyInjection)在.net核心web api应用程序中映射数据和视图模型。我在视图模型上有一个age属性,并使用自定义解析器根据数据模型的出生日期计算年龄

以下是我在StartupClass中添加AutoMapper的方式:

services.AddAutoMapper(config => config.AddProfile(new AutoMapperProfiles()));
这是AutoMapper配置文件类:

public class AutoMapperProfiles : Profile
{
    public AutoMapperProfiles()
    {
        CreateMap<User, UserDetailDTO>()
            .ForMember(dest => dest.PhotoUrl, opt =>
            {
                opt.MapFrom(src => src.Photos.FirstOrDefault(p => p.IsMain).Url);
            })
        .ForMember(dest => dest.Age, opt =>
        {
            opt.MapFrom<AgeResolverForUserDetail>();
        });

        CreateMap<User, UserListDTO>()
            .ForMember(dest => dest.PhotoUrl, opt =>
            {
                opt.MapFrom(src => src.Photos.FirstOrDefault(p => p.IsMain).Url);
            })
        .ForMember(dest => dest.Age, opt =>
        {
            opt.MapFrom<AgeResolverForUserList>();
        });

        CreateMap<Photo, PhotoDTO>();
    }
}
公共类自动映射配置文件:配置文件
{
公共自动映射配置文件()
{
CreateMap()
.FormMember(dest=>dest.PhotoUrl,opt=>
{
opt.MapFrom(src=>src.Photos.FirstOrDefault(p=>p.IsMain.Url);
})
.FormMember(目标=>dest.Age,opt=>
{
opt.MapFrom();
});
CreateMap()
.FormMember(dest=>dest.PhotoUrl,opt=>
{
opt.MapFrom(src=>src.Photos.FirstOrDefault(p=>p.IsMain.Url);
})
.FormMember(目标=>dest.Age,opt=>
{
opt.MapFrom();
});
CreateMap();
}
}
这是AgeResolverForUserDetail:

public class AgeResolverForUserDetail : IValueResolver<User, UserDetailDTO, int>
{
    public int Resolve(User source, UserDetailDTO destination, int destMember, ResolutionContext context)
    {
        return source.BirthDate.CalculateAge();
    }
}
公共类AgeResolverForUserDetail:IValueResolver
{
公共int解析(用户源、用户详细信息到目标、int destMember、解析上下文)
{
返回source.BirthDate.CalculateAge();
}
}
当我运行应用程序并尝试获取用户详细信息时,映射对象会引发异常:

处理请求时发生未处理的异常。 AutoMapperMappingException:无法创建DatingApp.Utility.AutoMapperUtilities.AgeResolverForUserDetail类型的实例 MappingOperationOptions.cs第47行中的AutoMapper.MappingOperationOptions.CreateInstance() AutoMappingException:映射类型错误。 映射类型: 用户->用户详细信息 DatingApp.Models.DataModels.User->DatingApp.Models.ViewModels.UserDetailDTO 类型映射配置: 用户->用户详细信息 DatingApp.Models.DataModels.User->DatingApp.Models.ViewModels.UserDetailDTO 目的地成员: 年龄

你能给我一个解决办法吗


谢谢

我似乎在AM6中找不到这样的
映射,你确定你没有使用更新的AM版本(如8)?@Ivan Stoev我使用这个软件包:AutoMapper.Extensions.Microsoft.DependencyInjection和installed version是6I我只是想更新问题中的信息。我无法复制,也不确定@LucianBargaoanu(AM贡献者之一)通过他发布的链接是什么意思。希望他能解释得更多。同时,我建议尝试
opt.MapFrom(new agesesolverforuserdetail())当使用DI扩展时,所有AM类型都通过DI解析。谢谢@Ivan Stoev..谢谢Lucian Bargaoanu。。。我使用opt.MapFrom(new agesesolverforuserdetail());而且效果很好。我不知道为什么我的上一个代码不起作用,因为正如这里解释的,它应该起作用。