1 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
我認(rèn)為你的問題的核心在于以下觀察:
某些模塊實(shí)現(xiàn)多線程方法,需要將 DbContext 作為瞬態(tài)服務(wù)注入,以防止任何線程問題。
這意味著您的應(yīng)用程序代碼本身負(fù)責(zé)處理多線程;您可能正在啟動(dòng)新的線程或任務(wù)。這是你應(yīng)該防止的事情。
相反,只有您的Composition Root應(yīng)該了解多線程性并且應(yīng)該派生出新線程。這集中了有關(guān)線程安全的知識(shí)。但不僅如此,許多組件都不是線程安全的,只有組合根應(yīng)該知道哪些組件是線程安全的,哪些不是。組件本身應(yīng)該始終以順序方式調(diào)用其依賴項(xiàng),并假設(shè)該依賴項(xiàng)只有一個(gè)實(shí)例。
這意味著當(dāng)您開始并行操作時(shí),您應(yīng)該返回到組合根以讓它解析新的對(duì)象圖。然后,組合根可以決定將組件的新實(shí)例注入到圖中(例如您的DbContext
)。
DbContext
當(dāng)您應(yīng)用這種工作方式時(shí),您將不再需要有瞬態(tài)版本和作用域版本。
- 1 回答
- 0 關(guān)注
- 158 瀏覽
添加回答
舉報(bào)