根据官方文件:https://google.github.io/dagger/subcomponents.html,我在@Module中添加了一个子组件,如下所示:
@Module(subcomponents = {MainActivityComponent.class})
public class ContextModule {
private Context mContext;
public ContextModule(Context context) {
mContext = context;
}
@Provides
public Context provideContext() {
return mContext;
}
}
并声明我的组件和子组件如下:
@Component(modules = ContextModule.class)
public interface AppComponent {
Context provideContext();
MainActivityComponent getMainActivityComponent();
}
@Subcomponent(modules = {HardwareModule.class, SoftwareModule.class})
public interface MainActivityComponent {
void injectMainActivity(MainActivity activity);
}
但代码无法成功编译。错误是这样的:
Error:(11, 1) : com.kilnn.dagger2.example.MainActivityComponent doesn't have a @Subcomponent.Builder, which is required when used with @Module.subcomponents
我不知道如何编写@ Subcomponent.Builder,如果我删除@Module中的子组件声明,一切正常。所以我不知道使用子组件的正确方法是什么。
答案 0 :(得分:0)
实际上,错误非常具有描述性,您需要做的就是将构建器添加到Subcomponent
,如下所示:
<强> MainActivityComponent.class 强>
@Subcomponent.Builder
interface Builder {
MainActivityComponent build();
}
对于您当前的实现,由于您没有特殊的依赖关系,因此您不需要Subcomponent
。
注意:出于惯例,我建议您将子组件重命名为MainActivitySubcomponent