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

ASP.NET Core 8 Blazor依赖注入报错:无法提供CompanyRepo实例

问题分析与解决方案

核心原因

你在Program.cs中仅注册了接口与实现类的映射关系(ICompanyRepo → CompanyRepo),但DI容器默认只会暴露接口类型的服务注册,不会直接注册具体实现类CompanyRepo本身。当你在Blazor组件中直接注入CompanyRepo时,容器找不到该类型的注册,因此抛出InvalidOperationException。

解决方案

方案1(推荐:遵循依赖倒置原则)

将Blazor组件中的注入对象改为接口类型,这是依赖注入的最佳实践,能降低组件与具体实现的耦合度:

  1. 修改CompanyList.razor中的注入代码:
    // 原错误写法
    // [Inject]
    // private CompanyRepo _companyRepo { get; set; }
    
    // 正确写法
    [Inject]
    private ICompanyRepo _companyRepo { get; set; }
    
    或者使用Razor指令注入:
    @inject ICompanyRepo CompanyRepo
    

方案2(特殊场景下直接注册实现类)

如果业务场景必须直接注入CompanyRepo,需要在Program.cs中额外注册该具体类型:

// 保留原接口映射注册
builder.Services.AddScoped<ICompanyRepo, CompanyRepo>();
// 新增具体实现类的注册
builder.Services.AddScoped<CompanyRepo>();

额外检查点

  • 确认Program.cs所在项目已正确引用iStar.Framework.Application.dll,且CompanyRepo的命名空间iStar.Framework.Application.Repositories未写错。
  • 清理解决方案后重新构建,确保项目引用和编译输出正常。
  • 验证CompanyRepo类是否为公共类(public class CompanyRepo),DI容器无法注入非公共类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:42:03