我使用DI編寫了一個大型應用程序。應用程序由初始化時的引導程序組成,其中大多數依賴項都被注入。一切皆好。使用依賴注入替換使用ServiceLocator的單身人士
但是,有一些服務*,我不能簡單地注入到處。一個很好的例子是日誌服務。這是一個日誌,因此,解決方案中的每一個類都可能希望將其用於調試或跟蹤目的。並不是每個類都是在初始化時創建的,有些是由第三方提供的(應用程序有點像框架)。現在,我的解決方案是使用單例;我甚至爲singleton創建了一些包裝類,所以我可以在可能的情況下注入它。
我在想,如果更好的方法是在這些地方使用ServiceLocator。這將完成刪除單身人士造成的硬連接。類會與定位器耦合,是的,但我可以爲它們提供任何實現。
* 在DDD術語中。
P.S .:我在這裏使用.NET,但我不會標記它;我相信這個問題適用於接受DI的任何語言。
這兩個選項都不好。日誌記錄是一個交叉問題,所以最好作爲裝飾處理:http://stackoverflow.com/a/7906547/126014 –