我在我的应用程序中使用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中找到

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

最佳答案

我以前从未注意到:/无论如何,经过一番挖掘,我发现它在哪里调用了构造函数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文件夹中的二进制文件)。

10-07 12:38
查看更多