我有一个非常非常基本的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本身创建的(似乎不是)。我不明白为什么这不起作用。