Dagger 2.22 - Невозможно предоставить контекст приложения для модуля - PullRequest
2 голосов
/ 01 апреля 2020

Я новичок в кинжале и с трудом понимаю, как передать контекст приложения в модуль, а затем в другие классы. У меня есть опыт работы с Guice, но не с Dagger. Я знаю, что об этом уже было много постов, но я не могу понять, что мне нужно сделать, чтобы запустить его.

Мой код ниже:

Компонент:

@Component(
    modules = {
      AndroidSupportInjectionModule.class,
      ActivityBuildersModule.class,
      AppModule.class
    })
public interface AppComponent extends AndroidInjector<ManatimeApplication> {

  @Component.Builder
  interface Builder {
    @BindsInstance
    Builder application(Application application);

    AppComponent build();
  }
}

Приложение:

public class ManatimeApplication extends DaggerApplication {

  @Override
  protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
    Log.d("DAGGER", "ManatimeApplication hash: " + hashCode());
    return DaggerAppComponent.builder().application(this).build();
  }
}

Модули:

ActivityBuildersModule:

@Module
public abstract class ActivityBuildersModule {

    @ContributesAndroidInjector
    abstract MainActivity contributeMainActivity();
}

AppModule:

public class AppModule {

    private Application context;

    public AppModule(Application context) {
        this.context = context;
    }

    @Provides
    static String test()    {
        return "dagger test";
    }

    @Provides
    Context provideAppContext() {
        Log.d("DAGGER", "ManatimeApplication in AppModule hash: " + context.hashCode());
        return context;
    }
}

Компиляция этого кода не получается с сообщением:

> Task :app:compileDebugJavaWithJavac FAILED
/Users/sunnykumar/AndroidStudioProjects/MyApplication/app/src/main/java/com/manatime/ManatimeApplication.java:6: error: cannot find symbol
import com.manatime.di.DaggerAppComponent;
                      ^
  symbol:   class DaggerAppComponent
  location: package com.manatime.di
/Users/sunnykumar/AndroidStudioProjects/MyApplication/app/src/main/java/com/manatime/di/AppComponent.java:22: error: @Component.Builder is missing setters for required modules or components: [com.manatime.di.AppModule]
  interface Builder {
  ^
2 errors

Вопросы:
1) Придется ли мне создавать AppModule с getApplicationContext() в ManatimeApplication и устанавливать его в компоновщике?
2 ) Есть ли другой способ решить эту проблему?
3) Что делает @BindsInstance, если оно не связывает значение приложения, которое я установил в компоновщике?
4) Сходятся ли значения, установленные в Компоненте компоновщика к модулю приложения?

...