Dagger 2 为 Component.Builder 抛出错误:@Component.Builder 缺少所需模块或组件的设置器:
Dagger 2 throws error for Component.Builder : @Component.Builder is missing setters for required modules or components:
我有一个组件AppComponent
@Component
public interface AppComponent {
}
我已经为此添加了一个组件生成器,以获取外部依赖项。
@Component
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
现在,我可以在应用程序中构建此组件 class
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 的默认构建器,而我的自定义 Component.Builder 没有 setter 来设置 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]
这是怎么回事?我已经用 @BindsInstance
给出了 setter setOtherComponent
但为什么它仍然说 missing setters for required modules or component
注意:如果我没有选择自定义 Component.Builder,那么 Dagger 将为依赖组件生成生成器方法
例如:
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
}
这将创建一个可以像
一样使用的构建器
AppComponent appComponent = DaggerAppComponent.builder()
.otherComponent(otherComponentInstance)
.build();
创建依赖组件时不需要放@BindsInstance
,只绑定暴露在OtherComponent
中的方法
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}
我有一个组件AppComponent
@Component
public interface AppComponent {
}
我已经为此添加了一个组件生成器,以获取外部依赖项。
@Component
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
现在,我可以在应用程序中构建此组件 class
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 的默认构建器,而我的自定义 Component.Builder 没有 setter 来设置 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]
这是怎么回事?我已经用 @BindsInstance
给出了 setter setOtherComponent
但为什么它仍然说 missing setters for required modules or component
注意:如果我没有选择自定义 Component.Builder,那么 Dagger 将为依赖组件生成生成器方法
例如:
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
}
这将创建一个可以像
一样使用的构建器 AppComponent appComponent = DaggerAppComponent.builder()
.otherComponent(otherComponentInstance)
.build();
创建依赖组件时不需要放@BindsInstance
,只绑定暴露在OtherComponent
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}