5

我有一个 ServiceStack API 应用程序,它使用 Simple Injector 作为其 IoC 容器。我需要某些组件来拥有“按网络请求”的生活方式。

我在这里查看了 Simple Injector 文档,发现它没有一种,而是两种与“每个网络请求”相对应的生活方式:

  1. 每个网络请求
  2. 每个 Web API 请求

这让我很困惑,因为我一直认为所有 ASP.NET 应用程序都使用相同的基本管道,并且 IoC 容器通过插入 HTTP 模块来实现每个 Web 请求。为什么这对于 Web API 应用程序会有所不同?

谁能阐明哪个最适合 ServiceStack API 应用程序?

4

1 回答 1

5

每个 Web 请求实际上是一个“每个 HttpContext 请求”,并且在掩护下它使用HttpContext.Current.Items字典缓存实例。但是,当您使用 Web API 时,此模型开始快速崩溃,这是由 Web API 的异步模型以及 Web API 应用程序可以在自托管环境中运行这一事实引起的(这意味着:不,根本HttpContext.Current没有)。

这就是 Simple Injector 为 Web API 应用程序提供特定生活方式的原因。这种 Per Web API Request 生活方式在后台使用新的 Execution Context Scope,它允许使用异步方法流动范围。

谁能阐明哪个最适合 ServiceStack API 应用程序?

如果 ServiceStack 本质上是异步的或者是自托管的,那么最好WebApiRequestLifestyle使用ExecutionContextScopeLifestyle. 如果在 ServiceStack 中运行时始终存在 HttpRequest.Current,则可以使用WebRequestLifestyle.

于 2014-03-05T11:28:41.740 回答