【发布时间】:2020-09-02 02:59:09
【问题描述】:
我有一个组件AppComponent
@Component
public interface AppComponent {
}
我为此添加了一个组件构建器,以获取外部依赖项。
@Component
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
现在,我可以在应用程序类中构建这个组件
AppComponent appComponent = DaggerAppComponent.builder()
.setContext(this)
.build();
一切都很完美。
现在我有另一个组件,比如OtherComponet
@Component
public interface OtherComponent {
}
我想将此组件添加为 AppComponent 的依赖项
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
现在,如果我编译,我会得到错误
error: @Component.Builder is missing setters for required modules or components: [dagger.OtherComponent]
interface Builder {
有道理。因为我已经覆盖了 AppComponent 的默认 Builder 并且我的自定义 Component.Builder 没有设置器来设置 OtherComponent 实例。
所以,我将此方法添加到我的 Custom.Builder
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
@BindsInstance
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}
现在如果我编译,我会得到完全相同的错误
error: @Component.Builder is missing setters for required modules or components: [dagger.OtherComponent]
这里有什么问题?我已经给了 setter setOtherComponent 和 @BindsInstance 但是为什么它说 missing setters for required modules or component
注意:如果我没有选择自定义 Component.Builder,那么 dagger 将为依赖组件生成构建器方法
例如:
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
}
这将创建一个可以像这样使用的构建器
AppComponent appComponent = DaggerAppComponent.builder()
.otherComponent(otherComponentInstance)
.build();
【问题讨论】:
-
添加 setOtherComponenet 时是否尝试删除 bindInstance?
标签: android dependency-injection dagger-2 dagger