2016-12-29 164 views
0

我试图定义ASP.NET MVC项目基本控制器 -BaseController不包含一个构造函数参数0

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(); 
    } 
} 

我继承它看到了一些例子来声明这样的基础控制器。但是,这一次我得到exception-

BaseController does not contain a constructor that takes 0 arguments 

我也Ninject绑定的DbContext -

kernel.Bind<ExpressMvc.DB.ExpressDbContext>().ToSelf().InRequestScope(); 

任何事情,我错过了或不认识的?

+2

在你的'BaseController',加入这行代码'公共BaseController(){ }'和that't吧:) – Hackerman

+0

检查出来可能是你缺少ninject.web.mvc包。 – Rajput

回答

0

正如你从BaseController继承已在其中明确一个参数定义构造函数,用于BaseController和HomeController的不创建一个默认的无参数的构造函数没有定义这样一个构造函数创建一个无参数的构造函数,是期望在基类中具有相同签名的构造函数。

您可以创建基类参数的构造函数或明确地定义,此构造public BaseController(ExpressDbContext context)应该这样调用

public class HomeController : BaseController 
{   
    public HomeController():base(ExpressDbContext _ObjectToBePassedToTheBaseConstructor) 
    { 
    } 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
-1

使用空的构造。否则c#编译器不会找到重载,因此会引发错误。它仅查找BaseController(ExpressDbContext上下文)重载。

public BaseController() 
    { 

    } 

如果缺少,则隐式地告诉编译器使用不带参数的默认构造函数。因为在基类中不存在这样的构造函数,所以它会给你这个错误。

1

而不是添加一个空的构造抽象的基础上,这可能不是你想要什么,如果你确实需要ExpressDbContext,你应该在构造函数添加到您的实现,而不是。

public class HomeController : BaseController 
{ 
    public HomeController(ExpressDbContext context) 
     : base(context) 
    { 

    } 

    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
相关问题