You need to enable JavaScript to run this app. Blazor Server应用执行存储过程及服务注入异常处理
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server应用执行存储过程及服务注入异常处理

问题根源

你在Razor组件里写的@inject语句服务类型和属性名顺序写反了,直接导致DI容器解析服务时匹配不到注册项。

报错逻辑拆解

Blazor的@inject语法规则为:

@inject <要解析的服务类型> <组件内接收实例的属性名>

你当前在CalculateItemImportance.razor里的写法是:

@inject CalculateImportanceService ICalculateImportanceService

这行代码的实际含义是:要求DI容器提供**类型为CalculateImportanceService(具体实现类)**的实例,赋值给组件内名为ICalculateImportanceService的属性。

但你在Startup.cs里的服务注册逻辑是:

services.AddScoped<ICalculateImportanceService, CalculateImportanceService>();

这个注册仅声明了「当请求ICalculateImportanceService接口类型的服务时,返回CalculateImportanceService的实例」,并没有将CalculateImportanceService这个具体类本身注册为可直接解析的服务类型,因此DI容器找不到对应类型,抛出了你看到的InvalidOperationException错误。

解决方法

按照依赖抽象的仓储模式设计思路,直接修改CalculateItemImportance.razor中的@inject语句,将服务类型替换为你注册的接口即可:

@inject ICalculateImportanceService ICalculateImportanceService

修改后DI容器会根据接口注册映射,自动返回对应的CalculateImportanceService实例,你现有无参数存储过程的执行逻辑无需改动即可正常运行。

补充说明:如果你确实需要直接注入具体实现类CalculateImportanceService,需要额外在Startup.cs的服务配置段增加一行注册:

services.AddScoped<CalculateImportanceService>();

但这种写法不符合面向抽象设计的原则,不推荐使用。

  • 优化提示:ICalculateImportanceService.cs文件内存在冗余的using ThePositionerBlazorServerDapperSyncfusion.Data;语句(接口本身就处于该命名空间下),可直接删除,不影响运行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 05:36:07