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

ASP.NET Core注入AutoMapper报错:公共参数化构造函数参数不匹配

问题原因分析:ASP.NET Core中使用[AsParameters]注入BpmsServices时的异常

问题场景

我有一个ASP.NET Core Web API项目,为配置AutoMapper,在Program.cs文件中添加代码:

builder.Services.AddAutoMapper(typeof(Program));

将AutoMapper注入到BpmsServices服务中,代码如下:

public class BpmsServices(
    IMapper mapper,
    IRepository<Workflow> workflowRepository)
{
    public IMapper DataMapper { get; } = mapper;
    public IRepository<Workflow> WorkflowRepository { get; } = workflowRepository;
}

在API文件中编写了路由与处理方法,使用[AsParameters]注入BpmsServices时,出现异常:

System.InvalidOperationException: The public parameterized constructor must contain only parameters that match the declared public properties for type 'BpmsServices'.

问题原因

[AsParameters]的核心作用是把HTTP请求中的参数(查询字符串、表单数据等)绑定到一个类的属性上,它对目标类有两个硬性要求:

  1. 构造函数的参数名称必须和类的公共属性名称完全一致(大小写敏感)
  2. 构造函数的参数必须是可以从请求中直接获取的简单类型,而非依赖注入的服务类型

你的BpmsServices类刚好踩中这两个问题:

  • 构造函数参数mapper对应属性DataMapper,workflowRepository对应属性WorkflowRepository,参数名和属性名完全不匹配,不符合[AsParameters]的绑定规则
  • 你试图通过[AsParameters]注入IMapper和IRepository<Workflow>这类DI服务,但[AsParameters]不是用来做依赖注入的——框架会尝试从请求参数里解析这些类型,而不是从DI容器中获取,自然会抛出异常

正确的做法是:BpmsServices作为DI服务,直接在API方法的参数列表中声明注入,不要用[AsParameters]标记它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:52:37