在BaseController中为MVC6和EF7初始化DbContext?

时间:2016-01-15 18:31:26

标签: dependency-injection asp.net-core asp.net-core-mvc entity-framework-core

ASP.Net 5 Getting Started文档之后,我看到由于dependency injection位于将访问数据库的任何控制器的顶部,我需要输入类似

的内容
private DbContext _Context;

public HomeController(DbContext Context)
{
      _Context = Context;
}

将DbContext注入控制器以供使用。在我的ASP.Net 5 MVC 6 Web App中,每个页面都将与数据库进行交互,所以我想我会创建一个BaseController,我的控制器的重置将继承并将注入代码放在那里。我已经完成了这个,但是从BaseController继承的每个控制器都给了我错误

  

没有给出的参数对应于'BaseController.BaseController(DbContext)所需的形式参数'Context'

我是DI的新手,不确定我是在做正确的事,还是可以按照我想要的方式完成。是否可以这样做,或者我必须将代码放在我制作的每个控制器上,如果我必须这样做,我怎样才能在与{DB}交互的BaseController中编写一个动作? / p>

1 个答案:

答案 0 :(得分:5)

如果您的基本控制器有一个带DbContext的构造函数,那么任何继承它的控制器也必须使用相同的构造函数,这样它就可以将依赖项传递给基类:

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

}