如何使用 dagger2 子组件?

How to use dagger2 subcomponent?

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

实际上,错误的描述性很强,您需要做的就是像这样将生成器添加到您的 Subcomponent 中:

MainActivityComponent.class

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

对于您当前的实施,由于您没有特殊的依赖项,因此您并不真正需要 Subcomponent

注意:为了方便起见,我建议您将 Subcomponent 重命名为 MainActivitySubcomponent