【问题标题】:What is the correct 'per request' Simple Injector lifestyle to use in a ServiceStack API application?在 ServiceStack API 应用程序中使用的正确“每个请求”简单注入器生活方式是什么?
【发布时间】:2014-04-07 09:40:25
【问题描述】:

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

我查阅了Simple Injector 文档here,发现它没有一种,而是两种生活方式对应'per web request':

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

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

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

【问题讨论】:

标签: dependency-injection servicestack simple-injector perwebrequest


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2011-11-19
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2012-11-01
    相关资源
    最近更新 更多