Ninject 给出 NullReferenceException

Eye*_*dic 6 asp.net asp.net-mvc ninject ninject-2 asp.net-mvc-2

我正在使用 asp.net MVC 2 和 Ninject 2。

设置非常简单。控制器调用调用存储库的服务。

在我的控制器中,我使用注入来实例化服务类,没有任何问题。但服务类不会实例化存储库,从而给我 NullReferenceException。

public class BaseController : Controller
{
    [Inject]
    public IRoundService roundService { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这有效。但这并不...

public class BaseService
{
    [Inject]
    public IRoundRepository roundRepository { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在 RoundService 类中使用 roundRepository 时,出现 NullReferenceException。

IList<Round> rounds = roundRepository.GetRounds( );
Run Code Online (Sandbox Code Playgroud)

模块类 -

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( );
    }
}
Run Code Online (Sandbox Code Playgroud)

在global.axax.cs中

protected override IKernel CreateKernel( )
{
        return new StandardKernel( new ServiceModule( ),
            new RepositoryModule( )  );
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ino 1

您是否考虑过使用构造函数注入?

这就是我使用 Ninject 2 和 ASP.NET MVC 2 进行依赖项注入的方式,它沿着从控制器 -> 服务 -> 存储库及其他的整个链条运行。

对我来说,在对象的构造函数中拥有依赖项也很有意义。它使这些依赖关系对于必须实例化它的任何其他对象都高度可见和明显。否则,您可能会遇到空引用异常...有点像您这里的情况。

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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