Je me penche actuellement sur Dagger 2 (Java) et j'ai rencontré un problème dès le départ. Malheureusement, je n'ai pas été en mesure de trouver quelque chose à ce sujet dans la documentation de Dagger 2 ou sur Stackoverflow, donc si vous connaissez des ressources, je vous en serais vraiment reconnaissant.
J'ai préparé un exemple minimal dans ce référentiel pour expliquer mon problème : https://github.com/stackoverflow-samples/dagger2-dependency-cycle
Donc on a un Application la classe qui doit être construite
public class Application {
@Inject
public Application(SomeDependency one) {
}
public static void main(String[] args) {
DaggerApplicationComponent.create().build();
}
}
... avec une dépendance fictive
public class SomeDependency {
@Inject
public SomeDependency() {
}
}
Et bien sûr les classes/interfaces de Dagger ... ... une interface de composant :
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
Application build();
}
.. et un module :
@Module
abstract class ApplicationModule {
@Provides
static SomeDependency provideDepdendencyOne() {
return new SomeDependency();
}
}
Ce que je ne comprends pas, c'est pourquoi Dagger m'oblige à m'enregistrer. SomeDepdendency
con @Provides
et ne permet pas de l'enregistrer via l'annotation @Binds
:
@Binds
abstract SomeDependency bindDepdendencyOne(SomeDependency one);
Chaque fois que je change le code de @Provides
a @Binds
il me donne les erreurs suivantes :
[Dagger/DependencyCycle] Found a dependency cycle:
io.github.codejanovic.dagger2.example.SomeDependency is injected at
io.github.codejanovic.dagger2.example.ApplicationModule.bindDepdendencyOne(one)
io.github.codejanovic.dagger2.example.SomeDependency is injected at
io.github.codejanovic.dagger2.example.Application(one)
io.github.codejanovic.dagger2.example.Application is provided at
io.github.codejanovic.dagger2.example.ApplicationComponent.build()
Ne pas être capable de @Bind
une mise en œuvre n'a absolument aucun sens pour moi. Que dois-je superviser ?
Merci d'avance.