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();
    }
}
4

1 回答 1

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");
    }
}
于 2012-08-10T11:11:22.877 回答