You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中带依赖的AutoMapper自定义ValueResolver报无参构造错如何解决

问题原因

你遇到的异常核心原因是手动实例化了AutoMapper的Mapper实例,没有使用依赖注入容器托管的IMapper对象,导致AutoMapper无法从DI容器中获取带构造参数的自定义值解析器,只能尝试调用无参构造函数实例化解析器,因此触发报错。
另外还有一个配置问题:你注册值解析器时注册的是IValueResolver<,>接口,而AutoMapper默认按解析器的具体实现类型从容器拉取实例,接口注册不会生效。

解决步骤
  • 第一步:把映射配置移到AutoMapper的Profile类中,避免手动创建MapperConfiguration
// 新建映射配置类,继承Profile
public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Model.Db.Kontoauszug, KontoauszugDetailViewModel>()
            .ForMember(dest => dest.IsTeamleiter, opt => opt.MapFrom<KontoauszugIsTeamleiterResolver>());
    }
}
  • 第二步:调整DI注册逻辑,直接注册值解析器的具体实现类,同时确保ISysParamService已经提前注册到DI容器
// Startup.cs / Program.cs 注册代码
services.AddAutoMapper(typeof(Startup)); // 会自动扫描当前程序集所有Profile类加载配置
// 直接注册值解析器的具体类型,不要注册接口
services.AddScoped<KontoauszugIsTeamleiterResolver>();
  • 第三步:删除所有手动创建MapperConfiguration、Mapper实例的代码,通过构造函数注入托管的IMapper实例使用
// 在需要做映射的业务类中注入IMapper
public class KontoauszugService
{
    private readonly IMapper _mapper;

    // 构造函数注入,容器会自动传入托管的IMapper实例
    public KontoauszugService(IMapper mapper)
    {
        _mapper = mapper;
    }

    public KontoauszugDetailViewModel GetDetail(Model.Db.Kontoauszug kontoauszug)
    {
        // 直接使用注入的mapper做映射,不需要手动实例化
        return _mapper.Map<KontoauszugDetailViewModel>(kontoauszug);
    }
}

内容的提问来源于stack exchange,提问作者xeraphim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:06:03