我有一个成分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的默认生成器,而我的自定义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]
这里怎么了?我已经给二传手
setOtherComponent
和@BindsInstance
了,但是为什么它会说missing setters for required modules or component
注意:如果我不打算使用Custom Component.Builder,那么匕首将为依赖组件生成builder方法
例如:
@Component(dependencies = {OtherComponent.class}) public interface AppComponent { }
这将创建一个可以像]一样使用的构建器>
AppComponent appComponent = DaggerAppComponent.builder() .otherComponent(otherComponentInstance) .build();
我有一个组件AppComponent @Component公共接口AppComponent {}我为此添加了一个组件构建器,以获取外部依赖关系。 @Component公共接口AppComponent {...
[创建依赖项组件时无需放置@BindsInstance
,它只能在OtherComponent
内部绑定暴露方法
@Component(dependencies = {OtherComponent.class})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder setContext(Context context);
Builder setOtherComponent(OtherComponent otherComponent);
AppComponent build();
}
}