我使用asp.net MVC 2和Ninject 2.Ninject给NullReferenceException
设置非常简单。 控制器调用调用存储库的服务。
在我的控制器中,我使用注入来实例化服务类没有问题。但是服务类不会实例化这些存储库,给我NullReferenceException。
public class BaseController : Controller
{
[Inject]
public IRoundService roundService { get; set; }
}
This Works。但随后这个不...
public class BaseService
{
[Inject]
public IRoundRepository roundRepository { get; set; }
}
给予一个NullReferenceException,当我尝试使用roundRepository我RoundService类。
IList<Round> rounds = roundRepository.GetRounds();
模块类... 公共类ServiceModule:NinjectModule { 公共覆盖无效负载() { 绑定()。为了().InRequestScope(); }}
public class RepositoryModule : NinjectModule
{
public override void Load()
{
Bind<IRoundRepository>().To<RoundRepository>().InRequestScope();
}
}
在global.axax.cs
protected override IKernel CreateKernel()
{
return new StandardKernel(new ServiceModule(),
new RepositoryModule() );
}
是的,如果我把构造函数注入到主要的服务类中,而不是在基类中,那就行了。我想这是因为带有基类参数的构造函数永远不会被调用,只是默认的无参数。我对所有这些IOC/DI都很陌生,但它让我以一种新的方式思考事情,这很好。 – Iceman 2010-04-05 11:08:49
如果你的基类有一个依赖项,那么我就不会有一个无参数的构造函数,因为你再次隐藏了依赖项。而是让你的派生类调用正确的构造函数。我会编辑我的答案来举个例子。 – Charlino 2010-04-05 21:15:15