如何使用 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
根据官方文档: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