我正在使用Ninject for DI和MVC4应用程序中的Ninject.MVC3扩展,特别是版本3.0.0.6。
阅读Ninject维基上的documentation,看来用InRequestScope
创建的对象的生命周期实际上是由ASP.NET控制的,要正确清理一个,应该注册OnePerRequest
HttpModule
然而,由于无法找到type="Ninject.OnePerRequestModule"/>
,因此此doco看起来已过时。
另一方面,我最近阅读了一些bits,似乎表明NinjectHttpApplication
已经与OnePerRequest
打交道。
我的问题是Ninject.Web.MVC 3.0是否已经处理过这个问题,或者我是否还需要手动将HttpModule添加到我的'web.config'。
我已将下面的内容添加到我的配置中,一切似乎都有效,但我根本不知道如何测试对象何时被销毁:
<system.web>
<httpModules>
<add name="OnePerRequestModule" type="Ninject.Web.Common.OnePerRequestHttpModule"/>
</httpModules>
...
我是否需要手动添加OnePerRequest
HttpModule或Ninject.Web.MVC为我处理这个问题?
答案 0 :(得分:10)
执行摘要:不,您不需要在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包)
迂腐地说,the docco 说说:
要获得更多确定性行为,您可以执行以下任何操作:
...
- 醇>
使用Ninject.Web.Common扩展程序为您注册OnePerRequestModule。
...
你可以注册
(我的重点)。我会让它更明确......
Ninject
Ninject.Web.Common
的来源和我的一个应用程序。