Я использую 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;
}
}
Пожалуйста, помогите, и спасибо.