使用Ninject

时间:2015-10-08 19:19:30

标签: ninject monogame

我有一个非常非常基本的MonoGame游戏(几乎只是一个新项目,只有一个图像在屏幕上绘制)。

在我的Game课程中,我创建了一个StandardKernel的实例。在LoadContent中,我将其绑定到SpriteBatch

protected override void LoadContent ()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    this.SpriteBatch = new SpriteBatch (GraphicsDevice);

    // Setup DI bindings
    this.Kernel.Bind<SpriteBatch>().ToConstant<SpriteBatch>(this.spriteBatch);

    //TODO: use this.Content to load your game content here
}

(调试器点击此行。)稍后,我尝试使用它:

protected void LoadSpritesLater() {
  var spriteBatch = Game.Instance.Kernel.Get<SpriteBatch>();
}

出于某种原因,此行始终会抛出NullReferenceException。我已经确认Game.Instance.Kernel会向我返回一个我期望的StandardKernel个实例。

奇怪的是,如果我使用setter替换Bind调用(例如。this.SpriteBatch = spriteBatch),我可以在LoadSpritesLater中获取它并毫无问题地使用它。

我检查了Ninject源代码和文档,看看实例是否是通过Ninject本身创建的(似乎不是)。我不明白为什么这不起作用。

0 个答案:

没有答案