首页 文章

Ninject给出NullReferenceException

提问于
浏览
2

我正在使用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 回答

  • 2

    对不起,我不能回答为什么它不应该按照它应该的方式工作,但你有没有想过使用构造函数注入?

    这就是我使用Ninject 2和ASP.NET MVC 2进行依赖注入的方式,它从控制器 - >服务 - >存储库及其他方面一直向下运行 .

    对我来说,在对象的构造函数中包含依赖项也是有意义的 . 它使这些依赖关系高度可见,并且对于必须实例化它的任何其他对象都是显而易见的 . 否则你可能会得到null引用异常...有点像你在这里 .

    HTHS,
    查尔斯

    编辑:通过构造函数显示基类注入以响应注释 .

    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;
        }
    }
    

    这只是我做事的方式......别人可能有不同的想法/意见 .

相关问题