C# MVC 5 Ninject-无参数构造函数

C# MVC 5 Ninject-无参数构造函数,c#,asp.net-mvc,asp.net-mvc-5,ninject,C#,Asp.net Mvc,Asp.net Mvc 5,Ninject,我正在使用MVC5.2.3,我已经包括了一些包 尼尼特 Ninject.MVC5(也尝试使用MVC3) Ninject.Web.Common Ninject.Web.Common.WebHost 在NinjectWebCommon类(一个自动生成的类)中,我添加了 RegisterServices方法中的kernel.Bind().To().InRequestScope()。那么我有 public class ControllerBase : Controller {

我正在使用MVC5.2.3,我已经包括了一些包

  • 尼尼特
  • Ninject.MVC5(也尝试使用MVC3)
  • Ninject.Web.Common
  • Ninject.Web.Common.WebHost
在NinjectWebCommon类(一个自动生成的类)中,我添加了
RegisterServices
方法中的
kernel.Bind().To().InRequestScope()
。那么我有

public class ControllerBase : Controller
    {
        protected readonly ITestRepository _testRepository;

        public ControllerBase(ITestRepository testRepository)
        {
            _testRepository = testRepository;
        }
    }

当我尝试构建解决方案时,我得到了

ControllerBase does not contain a constructor that takes 0 arguments
即使我添加了无参数构造函数,它也只会触发那个构造函数,而接口不会被注入


这应该是现成的,知道它为什么不是吗?

因为
BaseController
没有无参数构造函数,而且它唯一的构造函数需要一个
ITestRepository
参数,派生类型需要通过调用基构造函数来提供此参数

试试这个:

public class HomeController : ControllerBase
{
    public HomeController(ITestRepository testRepository) : base(testRepository)
    {

    }
}
通过这种方式,Ninject能够将
ITestRepository
实现注入
HomeController
(派生类型)的构造函数中,后者反过来调用传递所需依赖项的基本构造函数(使用
base()


请参见HomeController是否定义了任何构造函数?@haim770没有构造函数,但这样我需要为每个控制器定义此构造函数。有没有一种方法可以将所有接口注入到base中,然后在派生的controllers中使用它们?我认为没有办法。如果您的派生控制器不包含显式告诉依赖项是什么的必要构造函数,Ninject就不会注入它。虽然您可以选择属性注入,但这并不是最优的。我将在新构造函数中为每个存储库手动调用ninject。谢谢你的帮助。
public class HomeController : ControllerBase
{
    public HomeController(ITestRepository testRepository) : base(testRepository)
    {

    }
}