2017-01-13 136 views
0

我在UserManager类中解决DbContext问题。ASP.NET核心解析服务中的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>(); 

有errror:

无法解析 'MyContext'类型的服务,而 尝试激活'UserManager'。

有谁知道问题在哪里?

+0

你的'MyContext_context'是一个输入错误的地方。将它改为'MyContext _context' – Bojje

+0

它的错字只是在这里格式化的cuz,但是感谢编辑:) – miechooy

回答

2

DI 应该解决MyContext与您提供的代码。解决的实例将无法工作(请参阅@Nikosi关于DbContextOptions的回答),但应解决/创建它。

检查您的项目的其他/第MyContext类。我认为你有两个,可能在不同的命名空间。从StartupUserManager文件的“去声明”(Ctrl +单击VS)MyContext - 它们是否引用相同的类?

+0

我的愚蠢的错误非常感谢! – miechooy

0

文档:Using DbContext with dependency injection

EF支持使用DbContext与依赖注入容器。 您的DbContext类型可以通过使用 AddDbContext<TContext>添加到服务容器中。

AddDbContext将增加使DbContext类型, TContextDbContextOptions<TContext>到可以从服务容器 注射。

添加的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; } 
} 
+0

这是正确初始化DbContext所需的,但不是为了解决它。 – Dmitry