2014-02-27 71 views
2

我想將簡單的注入器集成到我們的應用程序中,我需要找到一種方法來實現一個IsRegistered方法來查看是否在容器中註冊了一個類型。我怎樣才能實現這個?SimpleInjector IsRegistered方法?

回答

1

類似IsRegistered的方法在Simple Injector中沒有實現,因爲你不需要它。這種方法會導致Service Locator anti-pattern,應該不惜一切代價避免。

不必查詢某個類型的存在,即使沒有任何東西需要實現,也要確保始終註冊一個實現。註冊一個空實現(執行Null Object Pattern,不要與null reference混淆)。注入一個Null對象使消耗代碼更容易,並且使測試變得更容易,因爲依賴關係只是必需的,您將失去空檢查並調用IsRegistered

但是在某些情況下,您可能會在您的Composition Root(取決於並調用容器的位置)進行某些檢查。即使在這些情況下,使用IsRegistered將是非常罕見的(我從來沒有看到它的實際用途),儘管有cases查詢容器的註冊是非常有用的。

public static bool IsRegistered(this Container container, Type serviceType) 
{ 
    return container.GetRegistration(serviceType) != null; 
} 

儘管如此,該方法可以很容易地通過請求一個登記實現

相關問題