【发布时间】:2016-04-08 14:44:17
【问题描述】:
我目前正在尝试使用子组件使用自定义范围设置 dagger2,但我在使用 dagger 编译器时遇到了一些问题。更具体地说,我有以下设置:
@Qualifier @interface Foo {}
@Qualifier @interface Baz {}
@Scope @interface SomeScope {}
@Module
static class Amodule {
@Provides
@SomeScope
@Foo
String provideFoo(@Baz String baz) {
return "foo" + baz;
}
@Provides
@Baz
String provideBaz() {
return "baz";
}
}
@Component(modules = Amodule.class)
interface Acomponent {
@Baz String baz();
Subcomp subcomp();
}
@SomeScope
@Subcomponent
interface Subcomp {
@Foo String foo();
}
不幸的是,这给了我错误:
Acomponent (unscoped) may not reference scoped bindings:
@Component(modules = AModule.class)
^
@Provides @SomeScope @Foo String Amodule.provideFoo(@Baz String)
我已经设法通过将所有自定义范围绑定拆分到一个单独的模块来让事情正常工作,但我不确定为什么上面的设置不应该是可能的。另外,在我的例子中,Foo 和 Baz 对象是密切相关的,所以如果可以避免的话,我宁愿不将它们分成单独的模块。
谁能解释一下为什么匕首编译器不接受上面的例子?似乎在@SomeScope 子组件内部应该是公开@Foo 绑定的有效位置。我是否误解了某些东西,或者这可能是对代码生成方式的限制?
谢谢
【问题讨论】:
标签: java dependency-injection scope dagger dagger-2