1

如果我有一個從主應用程序啓動的線程。在這個線程中生成事件。每次生成事件時都會創建一個對象。在該對象中需要依賴性,所以我想注入該對象。我如何將這種依賴性傳遞給創建的對象?我是否需要向下傳遞這種愚蠢的行爲(讓線程中工作的班級知道這個依賴關係),還是有更好的方法來做到這一點?我使用Unity btw。創建對象的線程中的依賴注入

回答

3

最安全的方法是讓每個線程在開始時創建一個新的對象圖。不要通過其他線程傳遞依賴關係。

通過依賴注入,您可以嘗試集中關於對象生命週期的知識。這個集中的地方叫做Composition Root。當你開始將依賴關係從一個線程傳遞給另一個線程時,代碼的這些部分必須知道傳遞這些依賴關係是否安全。例如,那些依賴是線程安全的嗎?在許多情況下,這可能是微不足道的,但是可以阻止你用其他實現來改變這些依賴關係,因爲現在你必須記住你的代碼中存在這樣的地方,你需要知道哪些依賴被傳遞。您再次分散了這些知識,使得更難以推斷DI配置的正確性,並更容易以導致競爭狀況的方式錯誤配置容器。

您可以在此維基頁面找到關於此主題的更多信息:How to work with dependency injection in multi-threaded applications