我正在用asp.net構建web api,我正在使用UnityContainer處理依賴關係。ASP.NET Web Api依賴注入 - 單例與否
例如,我的身份驗證控制器可依賴於身份驗證服務:
class AuthController : ApiController {
private IAuthService authService;
public AuthController (IAuthService AuthService) {
this.authService = AuthService;
}
...
}
我的身份驗證服務的實現可以依靠我的用戶信息庫:
class AuthController : IAuthService {
private IUserRepository userRepository;
public AuthService (IUserRepository UserRepository) {
this.userRepository = UserRepository;
}
...
}
現在,我知道, unity有兩種處理依賴關係的方法,它可以在每次需要時創建依賴項的新實例,或者可以將依賴項的實例保存爲單例,並在每次需要依賴項時注入同一個單例。
默認情況下,unity是第一種方法(每次創建一個新實例)。
我的問題是:我應該保持這種方式,還是應該告訴團結將我的服務和存儲庫保存爲單例?
這個問題真的出現在我的腦海裏,當我的用戶倉庫依賴於其他的依賴關係,並且依賴依賴於用戶倉庫。 當我試圖運行web api時,它會拋出一個堆棧溢出異常,我想它是這樣做的,因爲它每次都必須創建一個新的用戶存儲庫實例和另一個存儲庫。
謝謝 阿里克
您的存儲庫可以作爲一個單身?不知道你的存儲庫是如何實現的,很難說。在嘗試使它成爲單例之前,我會解決循環依賴問題。 – Nick
您需要爲每個請求創建一個新實例。 – Jasen
雅,首先修復你的循環依賴。我只會使用單例的唯一原因是跟蹤我不想丟失的狀態(例如:IsAuthenticated)。 – vidalsasoon