我使用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处理这个给我吗?
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 ) );
DynamicModuleUtility
从Microsoft.Web.Infrastructure
(和调用Start
方法是通过驱动:
[assembly: WebActivator.PreApplicationStartMethod( typeof( App_Start.NinjectWebCommon ), "Start" )]
(这是从WebActivator
NuGet包)
迂腐地讲, 在docco 说曰:
为了获得更多的确定性的行为,你可以做任何以下内容:
...
使用注册OnePerRequestModule为您Ninject.Web.Common扩展。
...
您可以注册
(我的重点)。 我会让它更加明确...
顺便说一句,在回答这个问题的演习开始,我没有专业知识,只是源Ninject
Ninject.Web.Common
和我的应用程序之一。
文章来源: Do I need to register Ninject.OnePerRequestModule with Ninject.Web.MVC 3.0?