我正在使用asp.net MVC 2和Ninject 2 .
设置非常简单 . 控制器调用调用存储库的服务 .
在我的控制器中,我使用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( );
模块类...公共类ServiceModule:NinjectModule {public override void Load(){Bind() . To() . 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( ) );
}
1 回答
对不起,我不能回答为什么它不应该按照它应该的方式工作,但你有没有想过使用构造函数注入?
这就是我使用Ninject 2和ASP.NET MVC 2进行依赖注入的方式,它从控制器 - >服务 - >存储库及其他方面一直向下运行 .
对我来说,在对象的构造函数中包含依赖项也是有意义的 . 它使这些依赖关系高度可见,并且对于必须实例化它的任何其他对象都是显而易见的 . 否则你可能会得到null引用异常...有点像你在这里 .
HTHS,
查尔斯
编辑:通过构造函数显示基类注入以响应注释 .
这只是我做事的方式......别人可能有不同的想法/意见 .