注入NullReferenceException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注入NullReferenceException相关的知识,希望对你有一定的参考价值。

我正在使用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; }
}

提供NullReferenceException,当我尝试在RoundService类中使用roundRepository时。

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( )  );
}
答案

对不起,我无法回答为什么这不能正常工作,但是您考虑过使用构造函数注入吗?

这就是我使用Ninject 2和ASP.NET MVC 2进行依赖项注入的方式,并且从控制器->服务->存储库及以后的版本一直沿链进行。

对我来说,在对象的构造函数中具有依赖关系也很有意义。它使这些依赖关系对于必须实例化的任何其他对象来说都是高度可见和明显的。否则,您可能最终会得到null引用异常……有点像这里的内容。

HTH,查尔斯

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

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

这只是我的处事方式,其他人可能有不同的想法/意见。

以上是关于注入NullReferenceException的主要内容,如果未能解决你的问题,请参考以下文章

IOC 控制反转Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )(代

ActiveMQ消息生产者自动注入报错:Could not autowire. No beans of 'JmsMessagingTemplate' type found(示例代码(代

发生“System.NullReferenceException”类型的异常

NullReferenceException,没有堆栈跟踪......从哪里开始?

什么是 NullReferenceException,我该如何解决?

什么是 NullReferenceException,我该如何解决?