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

.NET 6中注入DbContext到类时构造函数找不到的问题排查

问题解决步骤

1. 修复DbContext构造函数的访问权限

报错的核心原因是MyApplicationDbContext的构造函数是私有的,依赖注入容器无法访问并创建该类的实例。只需给构造函数添加public修饰符:

// 修改后的DbContext代码
using MyApplication.Domain.Models;
using Microsoft.EntityFrameworkCore;
namespace MyApplication.Domain
{
    public class MyApplicationDbContext : DbContext
    {
        public DbSet<ExampleModel> Examples { get; set; }

        // 添加public修饰符,让DI容器能访问
        public MyApplicationDbContext(DbContextOptions<MyApplicationDbContext> options) : base(options) { }
    }
}

2. 修正服务的生命周期注册

你当前把ExampleQuery和ExampleService注册为Singleton(单例),但DbContext默认是Scoped(请求域)生命周期——单例服务会长期持有DbContext实例,会引发资源泄漏、并发访问异常等问题。

需要将这两个服务改为Scoped注册,和DbContext的生命周期保持一致:

// 修改后的Program.cs注册代码
builder.Services.AddDbContext<MyApplicationDbContext>(dbContextOptions => 
    dbContextOptions.UseSqlServer(builder.Configuration.GetConnectionString("MyApplication")));
// 替换AddSingleton为AddScoped
builder.Services.AddScoped<ExampleQuery>();
builder.Services.AddScoped<ExampleService>();

额外优化提示

  • 获取连接字符串时,用GetConnectionString比GetValue<string>更简洁,也符合EF Core的常规用法
  • ExampleQuery的Query方法可以返回IQueryable<ExampleModel>,这样上层可以进一步做筛选、分页等操作,而不是直接返回IEnumerable(会立即执行查询)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:57:40