Asp.net mvc BaseController不包含接受0个参数的构造函数
我正在尝试在ASP.NET MVC项目中定义一个基本控制器-Asp.net mvc BaseController不包含接受0个参数的构造函数,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,我正在尝试在ASP.NET MVC项目中定义一个基本控制器- public abstract class BaseController:Controller { protected readonly ExpressDbContext DbContext; string _baseUrl; public BaseController(ExpressDbContext context) { _baseUrl = ConfigurationManag
public abstract class BaseController:Controller
{
protected readonly ExpressDbContext DbContext;
string _baseUrl;
public BaseController(ExpressDbContext context)
{
_baseUrl = ConfigurationManager.AppSettings["BaseUrl"].ToString();
DbContext = context;
}
protected new ViewResult View()
{
this.ViewBag.BaseUrl = _baseUrl;
return base.View();
}
}
然后从其他控制器继承它-
public class HomeController : BaseController
{
public ActionResult Index()
{
return View();
}
}
我看到了一些这样声明基本控制器的示例。但这一次我得到了例外-
BaseController does not contain a constructor that takes 0 arguments
我还在Ninject中绑定DbContext-
kernel.Bind<ExpressMvc.DB.ExpressDbContext>().ToSelf().InRequestScope();
kernel.Bind().ToSelf().InRequestScope();
有什么我遗漏或不知道的吗?使用空构造函数。否则,c#编译器找不到重载,因此会抛出错误。它仅查找BaseController(ExpressDbContext上下文)重载
public BaseController()
{
}
如果没有,则隐式地告诉编译器使用不带参数的默认构造函数。由于基类中不存在此类构造函数,因此会出现此错误。您应该向实现中添加构造函数,而不是向抽象基类中添加空构造函数(如果您实际需要
ExpressDbContext
,则可能不需要空构造函数)
public class HomeController : BaseController
{
public HomeController(ExpressDbContext context)
: base(context)
{
}
public ActionResult Index()
{
return View();
}
}
当您从BaseController继承时,您在其中用一个参数显式定义了构造函数,没有为BaseController创建默认的无参数构造函数,HomeController没有定义构造函数,因此创建了无参数构造函数,并且希望基类中的构造函数具有相同的签名 您可以在基类中创建一个无参数构造函数,也可以明确定义此构造函数
publicbaseController(ExpressDbContext context)
的调用方式如下
public class HomeController : BaseController
{
public HomeController():base(ExpressDbContext _ObjectToBePassedToTheBaseConstructor)
{
}
public ActionResult Index()
{
return View();
}
}
在您的
BaseController
上,添加这一行代码public BaseController(){}
,就这样:)检查它,可能您缺少ninject.web.mvc包。