5

我正在努力使用文档来弄清楚我需要什么。无论如何,文档(据我所知)适用于 1.5。

注意:我不想扩展 NinjectHttpApplication

我已将其配置为在Application_Start()中使用NinejctControllerFactory ,但是当它尝试创建控制器时,我在KernelContainer.Kernel上得到一个空引用异常。如果我不扩展 NinjectHttpApplication,我应该在哪里配置内核?

4

4 回答 4

5

由于您已经在扩展另一个 HttpApplication 派生类,因此我的想法是将相关源代码从NinjectHttpApplication类复制到扩展的 HttpApplication 类中。与其剪切和粘贴,不如在此处查看Ninject2 Ninject.Web.Mvc 扩展项目中 NinjectHttpApplication的源代码

我会专门复制Application_Start()Application_Stop()方法中的内容。注册控制器的其他方法很好,但是您可以根据需要注册控制器。您将在Application_Start()中注意到,内核是通过调用纯虚函数CreateKernel()创建的——您可以简单地在此处内联创建内核。此外,请注意NinjectHttpApplication类上存在 Kernel 属性——我也会将其复制到您自己的类中。看起来这里的意图是 HttpApplication 派生类有效地充当 KernelContainer。

免责声明:我还没有尝试过,看看它是否有效,但我很快就会尝试。我在一个 web 项目中使用了 Ninject 1.x,并打算在不久的将来升级到 Ninject 2;但是,我可能能够直接从 NinjectHtppApplication 派生。祝你好运!

于 2009-06-18T13:58:36.873 回答
2

看看这篇博文。它应该有助于阐明您需要执行的有关如何配置内核的过程。

http://www.kevinrohrbaugh.com/blog/2009/8/7/using-ninject-2-with-aspnet-mvc.html

于 2009-08-12T12:16:03.810 回答
2

不能从 NinjectHttpApplication 派生并不是什么大问题。它没有做太多,但它非常方便。彼得迈耶的建议是要走的路。只需在此处查看源代码。不过,您将不得不从 IHaveKernel 继承。

于 2009-09-14T07:51:56.837 回答
0

您仍然应该粘贴您拥有的代码,以便人们可以看到您可能出错的地方。

我认为这段代码应该放在你的 Application_Start 中:

ControllerBuilder.Current.SetControllerFactory(typeof(NinjectControllerFactory));
KernelContainer.Kernel = new StandardKernel(
    new AutoControllerModule(Assembly.GetExecutingAssembly();
);
于 2009-06-07T20:09:33.810 回答