MVC 5 Ninject - 没有无参数构造函数
MVC 5 Ninject - No parameterless constructor
我正在使用 MVC 5.2.3 并且我已经包含了包
- Ninject
- Ninject.MVC5(也尝试使用 MVC3)
- Ninject.Web.Common
- Ninject.Web.Common.WebHost
在 NinjectWebCommon class(自动生成的)中我添加了
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
即使我添加无参数构造函数,它也只会触发那个构造函数,而不会注入接口。
这应该开箱即用,知道为什么不行吗?
由于 BaseController
没有无参数构造函数,并且它唯一的构造函数需要一个 ITestRepository
参数,派生类型需要通过调用基本构造函数来提供此参数。
试试这个:
public class HomeController : ControllerBase
{
public HomeController(ITestRepository testRepository) : base(testRepository)
{
}
}
这样,Ninject 能够将 ITestRepository
实现注入到 HomeController
(派生类型)的构造函数中,后者又调用基础构造函数(使用 base()
) 传递所需的依赖项。
见MSDN
我正在使用 MVC 5.2.3 并且我已经包含了包
- Ninject
- Ninject.MVC5(也尝试使用 MVC3)
- Ninject.Web.Common
- Ninject.Web.Common.WebHost
在 NinjectWebCommon class(自动生成的)中我添加了
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
即使我添加无参数构造函数,它也只会触发那个构造函数,而不会注入接口。
这应该开箱即用,知道为什么不行吗?
由于 BaseController
没有无参数构造函数,并且它唯一的构造函数需要一个 ITestRepository
参数,派生类型需要通过调用基本构造函数来提供此参数。
试试这个:
public class HomeController : ControllerBase
{
public HomeController(ITestRepository testRepository) : base(testRepository)
{
}
}
这样,Ninject 能够将 ITestRepository
实现注入到 HomeController
(派生类型)的构造函数中,后者又调用基础构造函数(使用 base()
) 传递所需的依赖项。
见MSDN