如何使用dagger2子组件?

时间:2017-06-10 03:37:46

标签: android dagger

根据官方文件: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中的子组件声明,一切正常。所以我不知道使用子组件的正确方法是什么。

1 个答案:

答案 0 :(得分:0)

实际上,错误非常具有描述性,您需要做的就是将构建器添加到Subcomponent,如下所示:

<强> MainActivityComponent.class

@Subcomponent.Builder
interface Builder {
     MainActivityComponent build();
}

对于您当前的实现,由于您没有特殊的依赖关系,因此您不需要Subcomponent

注意:出于惯例,我建议您将子组件重命名为MainActivitySubcomponent