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

Var*_*yan 1 ninject ninject.web.mvc asp.net-mvc-3

我正在使用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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

具有继承的控制器: 错误'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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您具有所需的绑定,则由Ninject提供依赖关系:

Bind<IRepository<string>>().To<Repository<string>();
Run Code Online (Sandbox Code Playgroud)

您的BaseController不应该使用具体的存储库,而是接口.

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

    public BaseController(IRepository<string> db){
        this.db = db;
        Debug.WriteLine("Repository True");
    }
}
Run Code Online (Sandbox Code Playgroud)