使用构造函数继承基本控制器

时间:2012-08-09 21:35:59

标签: asp.net-mvc-3 ninject ninject.web.mvc

我正在使用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();
    }
}

1 个答案:

答案 0 :(得分: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");
    }
}