我在我的应用程序中使用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文件夹中的二进制文件)。