2009-04-08 69 views
0

我有一個具有請求作用域生命週期的服務依賴項的單例服務。依賴注入生命週期

如果我允許容器在第一次獲取單例時注入請求範圍服務,那麼當前請求將會罰款,但將在任何後續請求中處理。

這是否意味着我必須使用依賴容器在單例中創建請求範圍的服務?

回答

1

我不會推薦在您的單件服務中注入容器本身。相反:

  • 抽象創作後廠您的請求範圍的服務,並注入了工廠,或
  • 改變你的單身的範圍,使其請求範圍。除非服務的實例化代價高昂,否則這不應該成爲問題。
0

我會問,如果你的對象絕對必須是單身人士。如果它不是必須是單身人士,那麼不要讓它成爲單身人士並依靠你的容器來構建它。你遇到的問題是因爲依賴注入依賴於控制的反轉,而單例通常構造自己。

許多容器將負責它們構建的對象的生命週期。如果是你的,你可能會指示它只使用你的對象的一個​​實例。然而,如果我正確地閱讀你的問題,你確實需要每個請求的對象的新實例,因爲每個請求的狀態(服務)是不同的。

總之,使用單身作爲最後的手段,因爲它會導致您現在遇到的問題類型。如果您被鎖定到該模式,請考慮不注入服務,而是將其作爲參數傳遞。如果您將其引入狀態,則會遇到併發問題,即需要多個同時發生的請求需要不同的服務實例。