Dagger2构建错误:找到了一个依赖周期

时间:2018-12-06 15:16:02

标签: dagger-2

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
  • 用于Dagger2测试的IDEA Maven(Java)项目

项目网址:
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。寻求帮助

我不知道哪里出了问题。有人可以帮我吗?
非常感谢。

0 个答案:

没有答案