我使用MVC 5.2.3并且我已经包含了包
在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
即使我添加无参数构造函数,它只会触发一个并且接口不会被注入。
这应该是开箱即用的,任何想法为什么它不是?
答案 0 :(得分:1)
由于BaseController
没有无参数构造函数,并且它的唯一构造函数需要ITestRepository
参数,因此需要派生类型通过调用基础构造函数来提供此参数。
试试这个:
public class HomeController : ControllerBase
{
public HomeController(ITestRepository testRepository) : base(testRepository)
{
}
}
这样,Ninject能够将ITestRepository
实现注入到HomeController
(派生类型)的构造函数中,后者又调用基础构造函数(使用base()
)传递所需的依赖项
请参阅MSDN