1.Вопрос
Ошибка сборки Dagger2: Найден цикл зависимости
AppComponent.java
Error:(8, 10) java: [Dagger/BindingCycle] Found a dependency cycle:
A is injected at
AModule.provideA(a)
A is injected at
App.mA
App is injected at
AppComponent.inject(App)
2.Среда:
- IDEA 2018.2
- Проект IDEA Maven (Java) для теста Dagger2
URL проекта:
https://github.com/YingVickyCao/AndroidLibs/tree/master/source/dagger2
https://github.com/YingVickyCao/AndroidLibs/blob/master/source/dagger2/pom.xml
<dependencies>
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-compiler</artifactId>
<version>2.17</version>
<optional>true</optional>
</dependency>
</dependencies>
3.Источник
A.java
public class A {
private static final String TAG = A.class.getSimpleName();
public A() {
}
public String info() {
return "A@" + hashCode();
}
}
AModule.java
@Module
public class AModule {
private static final String TAG = AModule.class.getSimpleName();
// @Singleton
@Provides
public A provideA(A a) {
System.out.println(TAG + "," + "AModule@" + hashCode());
return new A();
}
}
AppModule.java
@Module(includes = {AModule.class})
public class AppModule {
private static final String TAG = AppModule.class.getSimpleName();
private App mApp;
public AppModule(App app) {
mApp = app;
Log.d(TAG, "AppModule@" + hashCode());
}
// @Singleton
@Provides
public App provideApp() {
return mApp;
}
}
AppComponent.java
@Component(modules = {AppModule.class})
public interface AppComponent {
void inject(App app);
}
App.java
public class App {
private static final String TAG = App.class.getSimpleName();
@Inject
A mA;
public void create() {
DaggerAppComponent.builder().appModule(new AppModule(this)).build().inject(this);
Log.d(TAG, mA.info());
}
public static void main(String[] args) {
App app = new App();
app.create();
}
}
4.Обратитесь за помощью
Я не знаю, где это идет не так.Кто-нибудь может мне помочь?
Большое спасибо.