我在 MVC4 应用程序中使用 Ninject 进行 DI 和 Ninject.MVC3 扩展,特别是版本 3.0.0.6。
正在阅读文档在 Ninject 的 wiki 上,似乎使用创建的对象的生命周期InRequestScope
实际上是由 ASP.NET 控制的,要正确清理,应该注册OnePerRequest
HttpModule。
然而,这个 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>
...
是否需要手动添加OnePerRequest
HttpModule 或 Ninject.Web.MVC 是否为我处理这个问题?
执行摘要:不,您不需要在其中执行任何操作web.config
.
您可以通过以下方式手动进行健全性检查:
- 绑定某物
IDisposable
.InRequestScope()
- 将其添加到 Controller 的 ctor 中
- 连接调试器,在其中放置断点
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 包)
迂腐地说,多科说说:
要获得更具确定性的行为,您可以执行以下任一操作:
-
...
-
使用 Ninject.Web.Common 扩展为您注册 OnePerRequestModule。
...
You can登记
(我的重点)。我会说得更明确...
顺便说一句,在回答这个问题的练习开始时,我没有特殊知识,只是来源Ninject
Ninject.Web.Common
和我的应用程序之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)