Asp.net mvc BaseController不包含接受0个参数的构造函数

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

我正在尝试在ASP.NET MVC项目中定义一个基本控制器-

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包。