ASP.NET Core在服务中解析DbContext

时间:2017-01-13 11:43:21

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

我在DbContext课程中解决UserManager时遇到问题。

这是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'。

有谁知道问题出在哪里?

2 个答案:

答案 0 :(得分:3)

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

检查您的项目是否有其他/第二MyContext课程。我认为你有两个,可能在不同的命名空间。 &#34;转到声明&#34; MyContextStartup文件中UserManager的{​​Ctrl +单击VS' - 是否引用同一个类?

答案 1 :(得分:1)

文档:Using DbContext with dependency injection

  

EF支持将public partial class Signature { protected override async void OnNavigatedTo(NavigationEventArgs e) { await myCanvas.RestoreStrokesAsync(ApplicationData.Current.SharedLocalFolder, "strokes.gif"); base.OnNavigatedTo(e); } protected override async void OnNavigatedFrom(NavigationEventArgs e) { await myCanvas.StoreStrokesAsync(ApplicationData.Current.SharedLocalFolder, "strokes.gif"); base.OnNavigatedFrom(e); } } 与依赖注入容器一起使用。   您可以使用DbContext类型添加到服务容器中   DbContext

     

AddDbContext<TContext>会添加两者您的AddDbContext类型,   DbContextTContext可用   从服务容器注入。

     

将dbcontext添加到依赖注入

DbContextOptions<TContext>
  

需要添加构造函数   接受services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration["database:connectionString"])); 的DbContext类型的参数。

您在DbContext中缺少配置选项

DbContextOptions