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

2023-11-23

我在 MVC4 应用程序中使用 Ninject 进行 DI 和 Ninject.MVC3 扩展,特别是版本 3.0.0.6。

正在阅读文档在 Ninject 的 wiki 上,似乎使用创建的对象的生命周期InRequestScope实际上是由 ASP.NET 控制的,要正确清理,应该注册OnePerRequestHttpModule。

然而,这个 doco 似乎已经过时了type="Ninject.OnePerRequestModule"/>找不到。

另一方面我读了一些bits最近这似乎表明NinjectHttpApplication已经处理OnePerRequest.

我的问题是 Ninject.Web.MVC 3.0 是否已经解决了这个问题,或者我是否仍然需要手动将 HttpModule 添加到我的“web.config”中。

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

  <system.web>
    <httpModules>
      <add name="OnePerRequestModule" type="Ninject.Web.Common.OnePerRequestHttpModule"/>
    </httpModules>
    ...

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


执行摘要:不,您不需要在其中执行任何操作web.config.

您可以通过以下方式手动进行健全性检查:

  • 绑定某物IDisposable .InRequestScope()
  • 将其添加到 Controller 的 ctor 中
  • 连接调试器,在其中放置断点void Dispose()
  • 手动触发HttpRequest

如果您击中Dispose,是 Ninject 射杀了熊(并且您将有一个调用堆栈来证明这一点)。

它用什么线连接呢?这Ninject.Web.CommonNuGet 包添加:

public static class NinjectWebCommon
{
    public static void Start()
    {
        ...
        DynamicModuleUtility.RegisterModule( typeof( OnePerRequestHttpModule ) );

DynamicModuleUtility来自Microsoft.Web.Infrastructure(以及对Start方法由以下驱动:

[assembly: WebActivator.PreApplicationStartMethod( typeof( App_Start.NinjectWebCommon ), "Start" )]

(这来自于WebActivatorNuGet 包)


迂腐地说,多科说:

要获得更具确定性的行为,您可以执行以下任一操作:

  1. ...

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

...

You can登记

(我的重点)。我会说得更明确...


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我需要向 Ninject.Web.MVC 3.0 注册 Ninject.OnePerRequestModule 吗? 的相关文章

随机推荐