2012-07-19 43 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