gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:16:00 26 4
gpt4 key购买 nike

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

阅读documentation在 Ninject 的 wiki 上,使用 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 会帮我处理这个问题?

最佳答案

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

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

  • 绑定(bind)某些东西 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.Infrastruct(对 Start 方法的调用由以下驱动:

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

(来自 WebActivator NuGet 包)

<小时/>

迂腐地说,the docco 说:

To get more deterministic behavior, you can do any of the following:

  1. ...

  2. Use the Ninject.Web.Common extensions that register the OnePerRequestModule for you.

...

You can register

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

<小时/>

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

关于ninject - 我需要向 Ninject.Web.MVC 3.0 注册 Ninject.OnePerRequestModule 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com