Reputation: 107
According to official documents:https://google.github.io/dagger/subcomponents.html ,I add a subcomponent in @Module, like this:
@Module(subcomponents = {MainActivityComponent.class})
public class ContextModule {
private Context mContext;
public ContextModule(Context context) {
mContext = context;
}
@Provides
public Context provideContext() {
return mContext;
}
}
And declare my component and subcomponent like this:
@Component(modules = ContextModule.class)
public interface AppComponent {
Context provideContext();
MainActivityComponent getMainActivityComponent();
}
@Subcomponent(modules = {HardwareModule.class, SoftwareModule.class})
public interface MainActivityComponent {
void injectMainActivity(MainActivity activity);
}
But the code can not be compiled successfully. The error is this:
Error:(11, 1) : com.kilnn.dagger2.example.MainActivityComponent doesn't have a @Subcomponent.Builder, which is required when used with @Module.subcomponents
I don't know how to write a @Subcomponent.Builder , and if i remove the subcomponent declare in @Module, everything is ok. So i don't know what is the right way to use subcomponent.
Upvotes: 3
Views: 1640
Reputation: 4127
Actually, the error is quite descriptive, all you need to do is add the Builder to your Subcomponent
like this:
MainActivityComponent.class
@Subcomponent.Builder
interface Builder {
MainActivityComponent build();
}
For your current implementation, and since you don't have special dependencies you don't really need the Subcomponent
.
Note: For convention's sake I recommend you to rename your Subcomponent to MainActivitySubcomponent
Upvotes: 1