C# MVC 5 Ninject-无参数构造函数
我正在使用MVC5.2.3,我已经包括了一些包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 {
- 尼尼特
- Ninject.MVC5(也尝试使用MVC3)
- Ninject.Web.Common
- Ninject.Web.Common.WebHost
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)
{
}
}