【发布时间】:2016-08-30 05:19:24
【问题描述】:
有没有办法告诉 Dagger 2 如何提供一些东西,但不允许它被注入?
假设我想注入一个Qux。 Qux 需要 Foo 和 Bar:
@Provides
@Singleton
Foo foo() {
return new Foo();
}
@Provides
@Singleton
Bar bar() {
return new Bar();
}
@Provides
@Singleton
Qux qux(final Foo foo, final Bar bar) {
return new Qux(foo, bar);
}
但是,如果我不希望 Foo 和 Bar 可注射怎么办?也许暴露它们会破坏Qux 的封装,或者它们是某种我只希望Qux 能够访问的工厂。
我已经想到了几种方法可以实现这一目标:
- 如果其他提供者需要
Foo单例,我可以将其设为类成员。但如果Foo有自己的多个依赖项,这将变得一团糟。 - 如果任何其他提供者都不需要
Bar单例,我可以在Qux提供者中创建实例。但是如果Qux有几个这样的依赖项,这会变得很混乱。
这些解决方案看起来都不是很优雅也不是很狡猾。还有其他方法吗?
【问题讨论】:
标签: dagger-2