Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Dagger 2为组件抛出错误。Builder:@Component.Builder缺少所需模块或组件的设置程序:_Android_Dependency Injection_Dagger 2_Dagger - Fatal编程技术网

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
给出了setter
setOtherComponent
,但为什么它仍然说
缺少所需模块或组件的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?