我需要与Ninject.Web.MVC 3.0注册Ninject.OnePerRequestModu

2019-08-19 03:53发布

我使用Ninject为DI和MVC4应用中的Ninject.MVC3扩展,特别是版本3.0.0.6。

阅读文档上Ninject的wiki,似乎与创建对象的生存InRequestScope实际上是由ASP.NET控制,并妥善清理应该注册OnePerRequest的HttpModule。

然而,它看起来像这样DOCO是过时作为type="Ninject.OnePerRequestModule"/>不能被发现。

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

我的问题是,是否Ninject.Web.MVC 3.0已经与这个问题涉及或者如果我仍然要对HTTP模块手动添加到我的“web.config中”。

我已经添加了下面我的配置,一切都似乎是工作,但我根本不知道一切是如何测试时,对象被销毁的:

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

我是否需要手动添加OnePerRequest的HttpModule或不Ninject.Web.MVC处理这个给我吗?

Answer 1:

Exec的总结:不,你不需要在做任何事情web.config

您能手动完整性检查方式:

  • 结合东西IDisposable .InRequestScope()
  • 将它添加到一个控制器的构造函数
  • 附加调试器,将断点在void Dispose()
  • 手动触发HttpRequest

如果你打的Dispose ,但沃兹Ninject那一枪熊(你就会有一个调用堆栈来证明这一点)。

什么电线它呢? 该Ninject.Web.Common NuGet包补充说:

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

DynamicModuleUtilityMicrosoft.Web.Infrastructure (和调用Start方法是通过驱动:

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

(这是从WebActivator NuGet包)


迂腐地讲, 在docco 曰:

为了获得更多的确定性的行为,你可以做任何以下内容:

  1. ...

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

...

可以注册

(我的重点)。 我会让它更加明确...


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



文章来源: Do I need to register Ninject.OnePerRequestModule with Ninject.Web.MVC 3.0?