我正在使用 asp.net MVC 2 和 Ninject 2。
设置非常简单。
Controller 调用调用存储库的服务。
在我的 Controller 中,我使用注入(inject)来毫无问题地实例化服务类。但是服务类不实例化存储库,给我 NullReferenceException。
public class BaseController : Controller
{
[Inject]
public IRoundService roundService { get; set; }
}
这有效。但这不……
public class BaseService
{
[Inject]
public IRoundRepository roundRepository { get; set; }
}
当我尝试在我的 RoundService 类中使用 roundRepository 时,给出 NullReferenceException。
IList<Round> rounds = roundRepository.GetRounds( );
模块类 -
public class ServiceModule : NinjectModule
{
public override void Load( )
{
Bind<IRoundService>( ).To<RoundService>( ).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( ) );
}
最佳答案
抱歉,我无法回答为什么这不能正常工作,但是您是否考虑过使用构造函数注入(inject)?
这就是我使用 Ninject 2 和 ASP.NET MVC 2 进行依赖注入(inject)的方式,它从 Controller -> 服务 -> 存储库及其他链一直向下工作。
在我的对象的构造函数中拥有依赖项对我来说也很有意义。它使这些依赖关系对于必须实例化它的任何其他对象高度可见和明显。否则你最终可能会遇到空引用异常......有点像你在这里。
HTH,
查尔斯
编辑:通过构造函数显示基类注入(inject)以响应评论。
public class BaseService
{
public IRoundRepository RoundRepo { get; private set; }
public BaseService(IRoundRepository roundRepo)
{
RoundRepo = roundRepo;
}
}
public class SquareService : BaseService
{
public ISquareRepository SquareRepo { get; private set; }
public SquareService(ISquareRepository squareRepo, IRoundRepository roundRepo)
: base(roundRepo)
{
SquareRepo = squareRepo;
}
}
这只是我做事的方式......其他人可能有不同的想法/意见。
关于asp.net - Ninject 给出 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2574706/