2016-12-29 159 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(); 
    } 
} 
相關問題