2012-07-19 80 views
1

我正在使用父級和子級注入器,並且我想確保不會意外地訪問父注入器中意圖綁定在子注入器中的類。如果父注入器訪問類,它可能會自動綁定(並且不正確,因爲範圍很重要)。我可以禁止在Guice注射嗎?

有沒有辦法強制自動綁定在父注入器失敗,或至少報告運行時錯誤?

舉例來說,如果我有一個方法Foo那就是「非法」請求吧:

class Bar { @Inject Bar() {} } // Shouldn't be accessible in Foo's injector 
class Foo { @Inject Foo(Bar bar) {} } // Binding should fail here 

回答

0

顯然,要做到這一點的唯一方法是爲每個被禁止的類編寫一個提供者方法。每個提供者方法都會拋出運行時異常。

我已經提交了一個enhancement request以支持在綁定時進行此操作。

0

看一看活頁夾文檔:

http://google-guice.googlecode.com/git/javadoc/com/google/inject/Binder.html

requireExplicitBindings()可能是你需要。通過在模塊中使用該語句,自動綁定被禁用,僅注入通過bind()provides配置的類。

+0

'skipSources'是爲了簡化錯誤輸出。當你有綁定錯誤時,Guice不會在調用堆棧中報告提供的類。 – 2012-07-19 19:52:13

+0

感謝您的信息...所以它的「全部或全部」(允許一切(默認)或拒絕一切,並明確添加綁定),沒有「一切,但...」模式。 – 2012-07-19 20:15:46

+0

是的,除了顯然你可以以模塊爲基礎限制模塊的這個要求,但它仍然適用於所有類。 – 2012-07-19 20:28:13