asp.net - Ninject 给出 NullReferenceException

标签 asp.net asp.net-mvc asp.net-mvc-2 ninject ninject-2

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

相关文章:

asp.net - 可以降级/回滚 .NET 4.5 运行时吗?

javascript - Windows.event 未定义 - Firefox 中的 Javascript 错误

asp.net-mvc - Html.TextBoxFor() 不生成任何 html 标记

asp.net - 不使用 session 创建可扩展的 ASP.Net MVC 网站

jquery - 尽管针对不同的请求, Controller 操作似乎是同步的?

asp.net - javascript $find 在 IE 中返回 null

c# - .net 应用程序的 oracle 连接超时

c# - Linq .GroupBy() 与计数

asp.net-mvc - 为什么我的 Web 部署项目会从我的 MVC2 项目中删除 .ascx 文件?

asp.net-mvc - ASP.NET MVC 3 为托管在一台本地服务器上的多门户应用程序提供防伪造保护