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请求中的参数(查询字符串、表单数据等)绑定到一个类的属性上,它对目标类有两个硬性要求:
- 构造函数的参数名称必须和类的公共属性名称完全一致(大小写敏感)
- 构造函数的参数必须是可以从请求中直接获取的简单类型,而非依赖注入的服务类型
你的BpmsServices类刚好踩中这两个问题:
- 构造函数参数
mapper对应属性DataMapper,workflowRepository对应属性WorkflowRepository,参数名和属性名完全不匹配,不符合[AsParameters]的绑定规则 - 你试图通过
[AsParameters]注入IMapper和IRepository<Workflow>这类DI服务,但[AsParameters]不是用来做依赖注入的——框架会尝试从请求参数里解析这些类型,而不是从DI容器中获取,自然会抛出异常
正确的做法是:BpmsServices作为DI服务,直接在API方法的参数列表中声明注入,不要用[AsParameters]标记它。
内容的提问来源于stack exchange,提问作者MB_18
相关产品推荐
相关产品推荐

