2012-08-09 56 views
1

我正在使用ninject注入我的存儲庫。我想有一個我的基類繼承,但我不能因爲它有一個構造函數。繼承基礎控制器與構造函數

基本控制器:

namespace Orcha.Web.Controllers 
{ 
    public class BaseController : Controller 
    { 
     public IRepository<string> db; 

     public BaseController(Repository<string> db){ 
      this.db = db; 
      Debug.WriteLine("Repository True"); 
     } 
    } 
} 

控制器與繼承: 錯誤 'BaseController' 不包含一個構造函數參數0 HomeController.cs

public class HomeController : BaseController 
{ 

    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

回答

5

C#要求,如果你的基礎類沒有默認的構造函數,你必須將構造函數添加到派生類中。例如。

public class HomeController : BaseController 
{ 
    public HomeController(IRepository<string> db) : base(db) { } 

    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

的依賴然後由Ninject提供的,如果你有需要的結合:

Bind<IRepository<string>>().To<Repository<string>(); 

你BaseController不應該採取一個具體的存儲庫,但接口。

public class BaseController : Controller 
{ 
    public IRepository<string> db; 

    public BaseController(IRepository<string> db){ 
     this.db = db; 
     Debug.WriteLine("Repository True"); 
    } 
} 
+0

那種看起來多餘。存儲庫的要點是不必將IRepository放在每個控制器上,它只會繼承它。 – 2012-08-13 18:02:35