【问题标题】:ASP.NET Core resolving DbContext in ServiceASP.NET Core 解析服务中的 DbContext
【发布时间】:2017-01-13 11:43:21
【问题描述】:

我在 UserManager 类中解析 DbContext 时遇到问题。

这里是UserManager类:

public class UserManager : IUserManager
{
    private readonly MyContext _context;

    public UserManager(MyContext context)
    {
        _context = context;
    }
 }

我的DbContext 班级:

public class MyContext: DbContext
{
    public DbSet<User> Users { get; set; }
}

启动:

services.AddDbContext<MyContext>(options =>
      options.UseSqlServer(Configuration["database:connectionString"]));
//....
services.AddScoped<IUserManager, UserManager>();

有错误:

无法解析服务类型 'MyContext' 同时 尝试激活“UserManager”。

有谁知道问题出在哪里?

【问题讨论】:

  • 你有一个错字,你的MyContext_context 是togheter。改成MyContext _context
  • 它的错字只是在这里因为格式,但感谢编辑:)

标签: c# asp.net dependency-injection asp.net-core


【解决方案1】:

DI 应该使用您提供的代码解析 MyContext。已解析的实例将不起作用(请参阅 @Nikosi 关于 DbContextOptions 的回答),但应该解析/创建它。

检查您的项目是否有其他/第二个MyContext 类。我认为您有两个,可能在不同的名称空间中。来自 Startup 和 UserManager 文件的 MyContext 的“转到声明”(在 VS 中按 Ctrl+单击) - 它们是否引用同一个类?

【讨论】:

    【解决方案2】:

    文档:Using DbContext with dependency injection

    EF 支持将DbContext 与依赖注入容器一起使用。 您的 DbContext 类型可以通过使用添加到服务容器中 AddDbContext&lt;TContext&gt;.

    AddDbContext 将添加 make both 您的 DbContext 类型, TContext 和 DbContextOptions&lt;TContext&gt; 可用于 从服务容器注入。

    添加dbcontext到依赖注入

    services.AddDbContext<MyContext>(options =>
      options.UseSqlServer(Configuration["database:connectionString"]));
    

    需要添加一个构造函数 接受 DbContextOptions 的 DbContext 类型的参数。

    您的 DbContext 中缺少配置选项

    public class MyContext: DbContext {
    
        public MyContext(DbContextOptions<MyContext> options) : base(options) { }
    
        public DbSet<User> Users { get; set; }
    }
    

    【讨论】:

    • 这对于正确初始化 DbContext 是必需的,但不是为了解决它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多