4

我有一個ServiceStack API應用程序,它使用Simple Injector作爲它的IoC容器。我需要某些組件具有「按網絡請求」的生活方式。什麼是在ServiceStack API應用程序中使用的正確的「每個請求」Simple Injector生活方式?

我簡單注射器文檔here在擡頭一看,發現它有不是一個,而是相當於「每Web請求」兩種生活方式:

  1. 每個Web請求
  2. 每個Web API請求

這讓我很困惑,因爲我總是認爲所有的ASP.NET應用程序都使用相同的基本管道,並且通過插入HTTP模塊實現每個Web請求的IoC容器。爲什麼Web API應用程序會有所不同?

任何人都可以瞭解哪些最適合於ServiceStack API應用程序?

+2

出於好奇,爲什麼不使用ServiceStack Funq IoC? – Scott

+0

@Scott:可能是因爲他需要Func缺乏的功能之一,例如[註冊開放泛型類型](https://simpleinjector.codeplex.com/wikipage?title=Advanced-scenarios#Registration-Of-Open -Generic-Types)或[註冊裝飾器](https://simpleinjector.codeplex.com/wikipage?title=Advanced-scenarios#Decorators)。 – Steven

+0

@斯科特:恐怕答案是我不知道!我沒有爲應用程序設置IoC。 – David

回答

5

Per Web Request實際上是一個'Per HttpContext Request',並且在封面下使用HttpContext.Current.Items字典緩存實例。但是,當您使用Web API時,此模型開始爲break down quickly,這是由Web API的異步模型以及Web API應用程序可以在自託管環境中運行(這意味着:根本沒有HttpContext.Current) 。

這就是Simple Injector爲Web API應用程序提供特定生活方式的原因。這個Per Web API Request生活方式在後臺使用新的執行上下文範圍,允許使用異步方法來傳遞範圍。

任何人都可以瞭解哪些最適合於ServiceStack API應用程序?

如果ServiceStack在本質上是異步的或自託管,你與WebApiRequestLifestyleExecutionContextScopeLifestyle更好。如果在ServiceStack內部運行時總是存在HttpRequest.Current,則可以使用WebRequestLifestyle

相關問題