我的所有注入控制器的构造函数每次请求都会被命中4次

时间:2010-08-08 19:28:38

标签: c# asp.net-mvc-2

我在我的应用程序中使用MVCTurbine,它会在我的asp.net-mvc 2.0网站中自动注入我的控制器。我的母版页,查看页面,css,web.configs和javascript文件都在我的mvc项目中,其余的(包括global.asax)都在单独的库中。

当我在Controller的构造函数中放置一个断点时,我注意到每个请求的所有构造函数都被命中4次,而实际操作的控制器会被第5次命中。

我试图通过以下方式减少问题表面:

  • 将我的观看次数和母版页减至最少(删除了所有自定义代码)
  • 减少了我的观点
  • 将我的控制器简化为最小值
  • 将我的global.asax.cs简化为最小值

断点没有有意义的堆栈跟踪。

将简化代码发布到http://gist.github.com/514442
可以在http://github.com/boriscallens/Beek

找到项目上下文中的问题代码

我有点想法,欢迎任何有关如何继续调试的提示或想法。

1 个答案:

答案 0 :(得分:1)

我以前从未注意到这一点:/无论如何,经过一些挖掘后,我发现了4次调用构造函数的地方。它应该只调用它们4次,并缓存结果(它正在寻找过滤器),但是MvcTurbine似乎正在丢失带缓存的实例。

这是导致问题的类:http://github.com/lozanotek/mvcturbine/blob/master/src/Engine/MvcTurbine.Web/Controllers/DefaultFilterFinder.cs

如果你复制&将此类粘贴到您的项目中,并将其注册到您应该按预期工作的IServiceRegistration类中。

locator.Register<IFilterFinder, FilterFinder>();

(我将该课程从FilterFinder重命名为DefaultFilterFinder

<强>更新

我弄清楚为什么它不起作用。这是因为当我从下载中下载2.1版本时,缓存结果的代码还没有。如果您从http://github.com/lozanotek/mvcturbine下载最新的源代码,它可以运行(您必须编译代码,使用deploy文件夹中的二进制文件)。