2010-07-06 64 views
1

我試圖重構我的代碼以使用Common Service Locator。我有一個其他組件使用的共享庫。ServiceLocator的消費者是否應該調用ServiceLocator.Current?

我不明白的是:這些組件是否應該調用ServiceLocator.Current並解決它們的類型?在這種情況下,我怎樣才能確保ServiceLocator.Current實際設置?我應該創建自己的「MyServiceLocator」並添加一個靜態構造函數嗎? (這似乎打敗了具有標準化抽象的目的)

或者我的共享庫有一個類,公開屬性公開屬性,從而保持ServiceLocator完全內部的共享庫嗎? (這意味着在抽象的抽象之上抽象)?

問題是組件不是通過DI創建的,而是應該調用容器來獲取他們需要的任何東西。

+1

燒SL,燒!! – 2010-07-07 08:34:14

回答

3

shouldn't be using a Service Locator at all。相反,通過允許您(或任何DI容器)向其中注入適當的依賴關係,確保所有依賴關係的使用者都可以使用可擴展性構造函數注入通常是最好的選擇。

Krzysztof Kozmic最近發佈了how a DI Container should be used的好概述。他的例子使用Castle Windsor,但您可以推斷任何DI Container以及Common Service Locator。但是,如果遵循這些原則,公共服務定位器變爲冗餘