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

ASP.NET依赖注入报错:无法解析DbSet服务激活RepositoryContext

解决ASP.NET中无法解析DbSet服务激活RepositoryContext的依赖注入错误

问题出在RepositoryContext的构造函数上——你没必要把DbSet<Product>和DbSet<Category>作为构造参数传入EF Core的DbContext。EF Core会自动为DbContext生成并管理DbSet实例,不需要通过依赖注入容器提供这些服务,这就是为什么DI容器找不到对应的服务实现,抛出激活错误。

修复步骤:

修改RepositoryContext的构造函数,移除DbSet<Product>和DbSet<Category>参数,只保留DbContextOptions<RepositoryContext>:

public class RepositoryContext : DbContext
{
    public DbSet<Product> Products { get; set; } 
    public DbSet<Category> Categories { get; set; } 

    // 只保留DbContextOptions参数
    public RepositoryContext(DbContextOptions<RepositoryContext> options) : base(options) 
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder); 
        modelBuilder.Entity<Product>()
            .HasData(new Product() { Id = 1, ProductName = "Laptop", Price = 1000 },
                new Product() { Id = 2, ProductName = "Keyboard", Price = 500 },
                new Product() { Id = 3, ProductName = "Computer", Price = 2500 },
                new Product() { Id = 4, ProductName = "Monitor", Price = 1000 },
                new Product() { Id = 5, ProductName = "Deck", Price = 500 }
            ); 
        modelBuilder.Entity<Category>()
            .HasData(
                new Category() { CategoryId = 1, CategoryName = "Book" },
                new Category() { CategoryId = 2, CategoryName = "Electronic" });
    }
}

为什么这样改:

DbContext的DbSet属性是EF Core用来映射数据库表的入口,EF Core会在DbContext实例化时自动初始化这些属性,不需要手动注入。你之前的构造函数要求DI容器提供DbSet实例,但你从未在Program.cs中注册过DbSet类型的服务,所以容器无法解析,导致错误。

你的Program.cs配置是正确的,不需要修改——AddDbContext<RepositoryContext>已经正确注册了DbContext服务,修改构造函数后DI就能正常激活RepositoryContext了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:03:35