2012-07-23 122 views
2

我tryied谷歌吉斯看完這篇文章後「注入」:http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/Guice和注射器

但有件事我不明白:當您使用吉斯的@Singleton anotation,注射注入相同實例,但只適用於一個Injector。

如果我在其他地方創建了其他注入器,@Singletion不起作用(如文檔中所述)。

因此,我將不得不在我的代碼中的任何地方傳遞注入器實例,或者使它在單例中可用。

而這正是我想避免的。

如何管理injectorS以便每次都可以返回相同的實例?

謝謝。

+1

>如果我在其他地方創建了其他注射器 爲什麼要創建其他注射器? – 2012-07-23 14:57:36

+0

@mlk,因爲我按照以下教程嘗試了Guice:http://code.google.com/p/google-guice/wiki/GettingStarted,他們通過在注入器上調用getInstance來構建對象。但我不認爲那個注射器必須在我的應用程序中到處通過。 – 2012-07-24 11:40:22

+0

你應該嘗試擁有的是一個單一的對象樹,而在主體中你有一個引導世界的引導類。 – 2012-07-24 12:54:12

回答

3

使用Guice的代碼通常不需要訪問注入器本身:如果對象需要構建多個對象,它們將獲得它們的依賴關係或其依賴關係或Provider<T>

通常情況下,對象只需要注入器,如果他們有依賴關係,但本身不是由注入器創建的(因此它們不能注入它們的依賴關係)。如果你到處使用Guice,你可能只需要在應用程序啓動時這樣做。如果你只使用Guice作爲你的項目的一部分,注入器將成爲一個單一的單例,代表你現在通過它訪問的所有其他單例。

請注意,註解@Singleton的類仍然是單身對象,儘管沒有與未注入的單身人士相關的一些行李。你仍然應該儘量避免依賴它們太多。