Dagger/MissingBinding 不能在没有@Provides 注释的方法的情况下提供

Dagger/MissingBinding cannot be provided without an @Provides-annotated method

从 dagger2 2.16 版本构建到 2.23.2 版本时出现异常。 它在 2.16 中启动并 运行。我没有修改任何代码。升级到2.23.2后,构建失败。 不知道是什么问题,求大家帮忙。 谢谢。

模块

@Module
public class BaseModule {

    private ConfigBuilder configBuilder;

    public BaseModule(@Nullable ConfigBuilder configBuilder) {
        this.configBuilder = configBuilder;
    }

    @Singleton
    @Provides
    public Gson provideGson() {
        GsonBuilder builder = new GsonBuilder();
        if (configBuilder != null) {
            configBuilder.buildGson(builder);
        }
        return builder.create();
    }

    @Singleton
    @Provides
    public OkHttpClient provideOkHttpClient() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        if (configBuilder != null) {
            configBuilder.buildOkHttp(builder);
        }
        builder.addInterceptor(new EncryptInterceptor());
        if (BuildConfig.DEBUG) {
            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            builder.addInterceptor(loggingInterceptor);
        }
        return builder.build();
    }

    @Singleton
    @Provides
    public Retrofit provideRetrofit(OkHttpClient okHttpClient, Gson gson) {
        Retrofit.Builder builder = new Retrofit.Builder()
                .client(okHttpClient);
        if (configBuilder != null) {
            configBuilder.buildRetrofit(builder);
        }
        builder.addConverterFactory(GsonWrapperConverterFactory.create(gson))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create());
        return builder.build();
    }

    @Singleton
    @Provides
    public SharedPreferencesPlus provideSharedPreferencesPlus(Application application, Gson gson) {
        return SharedPreferencesPlus.createDefault(application, gson);
    }
@Module
interface ActivityModule {

    @ActivityScope
    @ContributesAndroidInjector
    MainActivity main();
@Module
public interface ViewModelModule {

    @Binds
    @IntoMap
    @ViewModelKey(VMMain.class)
    ViewModel main(VMMain vm);

组件

@Singleton
@Component(modules = {BaseModule.class, AndroidSupportInjectionModule.class})
public interface BaseComponent {

    Application provideApplication();

    SharedPreferencesPlus provideSharedPreferencesPlus();

    Gson provideGson();

    OkHttpClient provideOkHttpClient();

    Retrofit provideRetrofit();

    @Component.Builder
    interface Builder {

        @BindsInstance
        Builder application(Application application);

        Builder AppModule(BaseModule baseModule);

        BaseComponent build();
    }
@ApplicationScope
@Component(modules = {
        ActivityModule.class,
        ViewModelModule.class,
        DataModule.class}, dependencies = BaseComponent.class)
public interface AppComponent
{
    void inject(AppContext application);
}

异常: [Dagger/MissingBinding] java.util.Map>> 如果没有 @Provides 注释方法,则无法提供。

java.util.Map>> 在 dagger.android.DispatchingAndroidInjector(..., injectorFactoriesWithStringKeys)

注入

dagger.android.DispatchingAndroidInjector 被注入 org.pp.va.video.app.AppContext.serviceInjector

org.pp.va.video.app.AppContext 被注入 org.pp.va.video.di.AppComponent.inject(org.pp.va.video.app.AppContext)

还要求: dagger.android.DispatchingAndroidInjector(..., injectorFactoriesWithStringKeys)

我发现从2.16到2.17开始有问题。 我观察到这个错误是因为在 AppComponent 中引入了 AndroidSupportInjectionModule。我之前在BaseComponent中引入了AndroidSupportInjectionModule,然后是AppComponent依赖的BaseComponent。现在不行了。我去掉了BaseComponent中AndroidSupportInjectionModule的引入,在AppComponent中引入了AndroidSupportInjectionModule,解决了我的问题

我目前的代码如下:

@ApplicationScope
@Component(modules = {
        ActivityModule.class,
        ViewModelModule.class,
        DataModule.class, AndroidSupportInjectionModule.class}, dependencies = BaseComponent.class)
public interface AppComponent
@Singleton
@Component(modules = {BaseModule.class})
public interface BaseComponent {