Android-Dagger2 - Невозможно получить зависимости от компонента приложения в область действия - PullRequest
0 голосов
/ 08 мая 2018

Я использую Dagger 2 для внедрения зависимостей, и все работает нормально, если внедрение находится в той же области, например: если ApplicationComponent внедряет экземпляры в Application Scope или ActivityComponent внедряет некоторый экземпляр в Activity Сфера, все в порядке. Проблема возникает тогда, когда я пытаюсь сделать ActivityComponent зависимым от ApplicationComponent и пытаюсь получить зависимости оттуда, приложение не собирается вообще, и я получаю 3 ошибки компилятора 1. Не удается найти класс символов DaggerActivityComponent 2. Не удается найти класс символов DaggerApplicationCom 3. не может получить доступ к Nullable. Я искал это, как и везде, но кажется, что ничего не решает проблему.

вот компонент приложения:

@ApplicationScope
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
void inject(MyApplication application);
}

Вот компонент деятельности:

@ActivityScope
@Component(modules = {ActivityModule.class}, dependencies =   ApplicationComponent.class)
public interface ActivityComponent {

void inject(MainActivity activity);
}

Вот модуль приложения:

@Module

открытый класс ApplicationModule {

@Provides
public Retrofit retrofit(GsonConverterFactory gsonConverterFactory) {
    return new Retrofit.Builder()
            .baseUrl(BuildConfig.BASE_URL)
            .addConverterFactory(gsonConverterFactory)
            .build();
}

@Provides
public Gson gson() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    return gsonBuilder.create();
}


@Provides
public GsonConverterFactory gsonConverterFactory(Gson gson) {
    return GsonConverterFactory.create(gson);
}
}

Вот модуль активности

@Module
public class ActivityModule {

}

Вот класс приложения

public class MyApplication extends Application{

ApplicationComponent component;

@Inject
Retrofit retrofit;

@Override
public void onCreate() {
    super.onCreate();

    component = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule())
            .build();
    component.inject(this);
}

public  ApplicationComponent component() {
    return component;
}
}

И, наконец, Задание:

public class MyApplication extends Application{

ApplicationComponent component;

@Inject
Retrofit retrofit;

@Override
public void onCreate() {
    super.onCreate();

    component = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule())
            .build();
    component.inject(this);
}

public  ApplicationComponent component() {
    return component;
}
}

Пожалуйста, помогите, и спасибо.

1 Ответ

0 голосов
/ 12 мая 2018

У меня была та же проблема, все, что вам нужно сделать, это просто добавить метод получения для зависимостей, которые должны быть внедрены ApplicationComponent в интерфейс ApplicationComponent, подобный этому.

например, если вам нужна модернизация, например, в вашем случае вы обычно определяете метод @Provides в ApplicationModule и добавляете

Retrofit getRetrofit();

в компоненте приложения.

Надеюсь, это поможет

...