Android Dagger 2为组件抛出错误。Builder:@Component.Builder缺少所需模块或组件的设置程序:
我有一个组件Android Dagger 2为组件抛出错误。Builder:@Component.Builder缺少所需模块或组件的设置程序:,android,dependency-injection,dagger-2,dagger,Android,Dependency Injection,Dagger 2,Dagger,我有一个组件AppComponent @Component public interface AppComponent { } @Component(dependencies = {OtherComponent.class}) public interface AppComponent { @Component.Builder interface Builder { @BindsInstance Builder setContext(Cont
AppComponent
@Component
public interface AppComponent {
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}
我已经添加了一个组件生成器,以获取外部依赖项
@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
public interface AppComponent {
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}
现在,如果我编译,我会得到错误
error: @Component.Builder is missing setters for required modules or components: [dagger.OtherComponent]
interface Builder {
有道理。因为我已经覆盖了AppComponent和我的自定义组件的默认生成器。生成器没有用于设置OtherComponent
实例的setter
因此,我将此方法添加到我的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
给出了settersetOtherComponent
,但为什么它仍然说缺少所需模块或组件的setter
@Component
public interface AppComponent {
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}
注意:如果我没有选择自定义组件.Builder,那么dagger将为依赖组件生成Builder方法
例如:
这将创建一个生成器,可以像
AppComponent appComponent = DaggerAppComponent.builder()
.otherComponent(otherComponentInstance)
.build();
在创建依赖组件时,您不需要放置
@BindsInstance
,它只能绑定其他组件中公开的方法
@Component
public interface AppComponent {
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
AppComponent build();
}
}
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}
添加setOtherComponenet时是否尝试删除bindInstance?