Ошибка сборки Dagger2: обнаружен цикл зависимости - PullRequest
0 голосов
/ 06 декабря 2018

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.Обратитесь за помощью

Я не знаю, где это идет не так.Кто-нибудь может мне помочь?
Большое спасибо.

...