gpt4 book ai didi

c# - 对于每个请求,我所有注入(inject)的 Controller 的构造函数都被命中 4 次

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:45 25 4
gpt4 key购买 nike

我在我的应用程序中使用 MVCTurbine,它会自动将我的 Controller 注入(inject)我的 asp.net-mvc 2.0 网站。我的母版页、 View 页、css、web.configs 和 javascript 文件都在我的 mvc 项目中,所有其他文件(包括 global.asax)都在单独的库中。

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

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

  • 将我的 View 和母版页减少到最少(删除所有自定义代码)
  • 降低了我的视野
  • 将我的 Controller 简化到最低限度
  • 将我的 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>();

(我将类从 DefaultFilterFinder 重命名为 FilterFinder)

更新

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

关于c# - 对于每个请求,我所有注入(inject)的 Controller 的构造函数都被命中 4 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435749/

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