MVC 5 Ninject - 没有无参数构造函数

时间:2015-03-23 17:14:30

标签: c# asp.net-mvc asp.net-mvc-5 ninject

我使用MVC 5.2.3并且我已经包含了包

  • Ninject
  • Ninject.MVC5(也尝试使用MVC3)
  • Ninject.Web.Common
  • Ninject.Web.Common.WebHost

在NinjectWebCommon类(一个自动生成的类)中我添加了 kernel.Bind<ITestRepository>().To<TestRepository>().InRequestScope()方法中的RegisterServices。然后我

public class ControllerBase : Controller
    {
        protected readonly ITestRepository _testRepository;

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

     public class HomeController : ControllerBase
     {
... some methods
     }

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

ControllerBase does not contain a constructor that takes 0 arguments

即使我添加无参数构造函数,它只会触发一个并且接口不会被注入。

这应该是开箱即用的,任何想法为什么它不是?

1 个答案:

答案 0 :(得分:1)

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

试试这个:

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

    }
}

这样,Ninject能够将ITestRepository实现注入到HomeController(派生类型)的构造函数中,后者又调用基础构造函数(使用base())传递所需的依赖项

请参阅MSDN