【问题标题】:Why are WebApi ApiController objects instantiated for every request? [closed]为什么要为每个请求实例化 WebApi ApiController 对象? [关闭]
【发布时间】:2018-02-15 21:08:24
【问题描述】:

令我们惊讶的是,我们的团队发现我们的 ApiController 类会针对每个传入请求进行实例化。我们团队中的大多数开发人员都希望控制器实例可以在默认情况下跨请求重用。*

我们已经搜索了这背后的理由或推理,以了解在重用 Controller 实例和创建新实例之间可能涉及的权衡,但没有找到任何具体的结果。是否有关于它的文档参考?


*我们确实意识到可能有一种方法可以改变行为(使其在请求之间重用实例),但这不是这个问题的重点。

【问题讨论】:

  • 我不明白接近投票说这是基于意见的 - 我特别措辞这个问题是为了征求参考,而不是意见。
  • 您的问题源于您对流程的工作方式缺乏了解。您自己发现了它的实际工作原理(赞)。但是现在您要询问为什么系统按照其设计方式设计的理由,这不是一个好的 SO 问题。 (您要求参考“谈论它”......我假设“它”意味着“理由”。)
  • @SailingJudo 我确实稍微改写了这个问题,以更好地反映我所寻求的(设计权衡等)。但是你不应该假设我(我们)不明白它是如何工作的。事实上,我们做得很好。我也从根本上不同意这不是“一个好的 SO 问题”。如果您查看我的代表,您会发现我已经写了 600 多个答案和几十个问题,因此我对 SO 的工作原理以及什么是好问题或坏问题有相当了解。
  • 话虽如此,我正试图找出如何用不同的措辞来获得我所寻求的信息。这不是我想要的意见,而是特定设计背后的推理(可能)双方都有权衡。其他网络应用程序框架不这样做,所以一定有一些原因,我希望它们被记录在案,或者至少在某处“写”。
  • @E-Riz 一个老问题,但我自己也经历过同样的兔子洞。我怀疑说您的问题主要基于意见”(强调我的)背后的原因是,除非您从实际设计和/或编写代码,任何答案都必须基于意见。一般来说,“为什么 {x} 以这种方式完成?” 形式的问题似乎在 SO 上并不受欢迎,尤其是最近。

标签: .net asp.net-web-api asp.net-apicontroller


【解决方案1】:

听起来您想了解更多有关 Web API 如何处理请求的信息。开始了解请求管道的好地方是this visual overview

ASP.NET Web API 是在 ASP.NET MVC 框架发布后的一段时间发布的。它们都使用类似的管道设计。有道理的是,一开始它们会有类似的请求处理方法,因为它们最终可以合并到一个管道中。

顺便说一句:管道的大部分组件都可以替换为自定义版本。如果你不同意 ApiController 的实现,simply 用你自己滚动的替换默认的 IHttpControllerTypeResolver

更新:Web API Core 具有完全不同的中间件设计,因此没有适用于该管道。

【讨论】:

  • 虽然所有信息都很有趣,但没有一个能真正解决问题。它甚至没有解释为每个请求创建控制器实例的事实,更不用说任何理由甚至改变该特定行为的方法。我对更改控制器或端点的发现方式不感兴趣。
  • @E-Riz 这里没有人有兴趣为 Microsoft 的设计决策辩护。但是,如果您得出不喜欢该系统的结论,Sixto 会解释如何使其按您想要的方式运行。
  • 这个问题没有问 如何 来改变它(即使它改变了,这个答案也没有解释任何关于这个问题所涉及的特定问题),它询问了使其以一种方式与另一种方式表现的权衡。您(和其他人)认为这不是一个好问题(我显然不同意,但如果您认为我不知道我在说什么,请检查我的代表),但即便如此这也不是一个好的答案被问到的问题.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多