2012-08-09 55 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