我在理解为什么以下代码不起作用时遇到问题.
我有以下项目结构:
@Component(modules = CCModule.class)
public interface CComponent {
XXX getXXX();
}
Run Code Online (Sandbox Code Playgroud)
哪里
@Module
public class CCModule {
@Provides @Singleton
public XXX provide XXX(){
return new XXX();
}
}
Run Code Online (Sandbox Code Playgroud)
和
@Component(dependencies = CComponent.class, modules = AAModule.class)
public interface AComponent {
YYY getYYY();
}
Run Code Online (Sandbox Code Playgroud)
哪里
class YYY {
@Inject
public YYY(XXX xxx) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我将所有内容初始化为:
CComponent c_component = Dagger_CComponent.builder().cCModule(new CCModule()).build();
AComponent a_component = Dagger_AComponent.builder()
.cComponent(c_component)
.aAModule(new AAModule())
.build();
Run Code Online (Sandbox Code Playgroud)
编译完成后,我收到以下错误:
错误:(11,1)错误:com.test.CComponent(unscoped)可能不引用作用域绑定:@Provides @Singleton com.test.XXX com.test.CCModule.provideXXX()
我的目标是让一个组件继承其他组件的绑定,以对对象(单例)进行相同的引用.
Kir*_*nov 111
你应该把@Singleton以CComponent类声明.
@Singleton
@Component(modules = CCModule.class)
public interface CComponent {
XXX getXXX();
}
Run Code Online (Sandbox Code Playgroud)
解释是错误消息:CComponent是未作用域的,@Singleton是作用域.Dagger 2不允许未范围的组件使用带范围绑定的模块.
但是,现在您将收到以下错误:
AComponent (unscoped) cannot depend on scoped components:
@Component(dependencies = CComponent.class, modules = AModule.class)
Run Code Online (Sandbox Code Playgroud)
未范围的组件不能具有范围依赖性.所以你需要制作AComponent范围.为此,请创建自定义AScope注释.
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface AScope {
}
Run Code Online (Sandbox Code Playgroud)
并用它注释AComponent:
@AScope
@Component(dependencies = CComponent.class, modules = AModule.class)
public interface AComponent {
}
Run Code Online (Sandbox Code Playgroud)
这些是最新快照发布中出现的新要求.它已在相应的问题中讨论过,可能仍会有所改变.
小智 5
加
@Singleton
@Component(modules = {NameModule.class})
public interface NameComponent {
}
Run Code Online (Sandbox Code Playgroud)
因为dagger2不允许使用带有作用域模块的未作用域组件
| 归档时间: |
|
| 查看次数: |
24453 次 |
| 最近记录: |