Dependency injection 在MVC6和EF7的BaseController中初始化DbContext?

Dependency injection 在MVC6和EF7的BaseController中初始化DbContext?,dependency-injection,asp.net-core,asp.net-core-mvc,entity-framework-core,Dependency Injection,Asp.net Core,Asp.net Core Mvc,Entity Framework Core,在文档之后,我看到,由于依赖项注入在任何将访问数据库的控制器的顶部,我需要放置 private DbContext _Context; public HomeController(DbContext Context) { _Context = Context; } 将DbContext注入控制器以供使用。在我的ASP.Net 5 MVC 6 Web应用程序中,每个页面都将与数据库交互,因此我想我将创建一个BaseController,控制器的重置将从中继承并将注入代码放在那里。我

在文档之后,我看到,由于
依赖项注入
在任何将访问数据库的控制器的顶部,我需要放置

private DbContext _Context;

public HomeController(DbContext Context)
{
      _Context = Context;
}
将DbContext注入控制器以供使用。在我的ASP.Net 5 MVC 6 Web应用程序中,每个页面都将与数据库交互,因此我想我将创建一个
BaseController
,控制器的重置将从中继承并将注入代码放在那里。我已经这样做了,但是从
BaseController
继承的每个控制器都会告诉我错误

没有给定与“BaseController.BaseController(DbContext)”的必需形式参数“Context”对应的参数


我是DI的新手,不确定我做的事情是否正确,甚至不确定是否可以按照我想要的方式来做。有没有可能这样做,或者我必须把代码放在我做的每个控制器上,如果我必须这样做,我如何才能在与DB交互的
BaseController
中编写操作?

如果您的基本控制器有一个采用DbContext的构造函数,那么继承它的任何控制器也必须使用像这样的构造函数,以便将依赖关系传递给基类:

public HomeController(DbContext Context):base(Context)
{

}

我添加了您的代码,错误消失了,但我正在执行的
\u DbContext
无法从
HomeController
访问。您需要在基本控制器中声明为受保护,以便允许HomeController使用它,我建议不要使用那样的basecontroller,我也不会直接由控制器使用dbcontext。相反,我将使用一些服务类包装dbContext,并公开控制器进行数据操作所需的方法,而不提供对dbContext的直接访问。所以控制器需要注入服务类,服务类需要注入dbcontext。我不知道你的意思是什么,除了我在自己的项目中所学到的知识,以及仅仅几年的jr开发经验之外,我没有太多的经验。在我一个月前开始使用.Net 5之前,DI对我来说是全新的。basecontroller没有提供任何好处,除非它有其他功能,因为派生的控制器仍然需要依赖于dbcontext。最好在UI(控制器)和数据层之间有一个抽象层,而不是直接使用dbcontext