我需要在Ninject.Web.MVC 3.0中注册Ninject.OnePerRequestModule吗?

Pau*_*uer 8 ninject ninject.web.mvc

我正在使用Ninject for DI和MVC4应用程序中的Ninject.MVC3扩展,特别是版本3.0.0.6.

阅读Ninject维基上的文档,看来创建的对象的生命周期InRequestScope实际上是由ASP.NET控制的,并且要正确清理它们应该注册OnePerRequestHttpModule.

然而,看起来这个doco已经过时了,因为type="Ninject.OnePerRequestModule"/>无法找到.

在另一方面,我读了一些最近,似乎表明,NinjectHttpApplication已经有涉及OnePerRequest.

我的问题是Ninject.Web.MVC 3.0是否已经处理过这个问题,或者我是否还需要手动将HttpModule添加到我的'web.config'中.

我已将下面的内容添加到我的配置中,一切似乎都在工作,但我根本不知道如何测试对象何时被销毁:

  <system.web>
    <httpModules>
      <add name="OnePerRequestModule" type="Ninject.Web.Common.OnePerRequestHttpModule"/>
    </httpModules>
    ...
Run Code Online (Sandbox Code Playgroud)

我是否需要手动添加OnePerRequestHttpModule或Ninject.Web.MVC为我处理这个?

Rub*_*ink 10

执行摘要:不,你不需要做任何事情web.config.

您可以通过以下方式手动完成检查:

  • 绑定一些东西 IDisposable .InRequestScope()
  • 将其添加到控制器的控制器中
  • 附加一个调试器,放入一个断点 void Dispose()
  • 手动触发a HttpRequest

如果你击中它Dispose,它就会击中熊的Ninject(并且你将有一个调用堆栈来证明它).

什么电线呢?该Ninject.Web.CommonNuGet包补充说:

public static class NinjectWebCommon
{
    public static void Start()
    {
        ...
        DynamicModuleUtility.RegisterModule( typeof( OnePerRequestHttpModule ) );
Run Code Online (Sandbox Code Playgroud)

DynamicModuleUtility来自Microsoft.Web.Infrastructure(并且Start方法的调用由以下因素驱动:

[assembly: WebActivator.PreApplicationStartMethod( typeof( App_Start.NinjectWebCommon ), "Start" )]
Run Code Online (Sandbox Code Playgroud)

(来自WebActivatorNuGet包)


讲话说,docco :

要获得更多确定性行为,您可以执行以下任何操作:

  1. ...

  2. 使用为您注册OnePerRequestModule的Ninject.Web.Common扩展.

...

可以注册

(我的重点).我会说得更清楚......


顺便说一句,在回答这个问题的练习开始时,我没有特别的知识,只是Ninject Ninject.Web.Common我和我的一个应用程序的来源.