2017-05-24 1 views
0

Je ces trois dépendances créées correctement (je l'ai vérifié par le débogage qu'ils existent bel et bien) à l'aide Dagger 2, nous allons les appeler a, b, c, comme ceci:dépendances Injecter à l'intérieur des méthodes @Provides avec Dagger 2

class Example { 
    ... 
    @Inject A a; 
    @Inject B b; 
    @Inject C c; 
    ... 
}, 

fourni par SomeModule comme suit:

@Module 
class SomeModule { 
    ... 
    @Singleton @Provides A provideA(){return new A()}; 
    @Singleton @Provides B provideB(){return new B()}; 
    @Singleton @Provides C provideC(){return new C()}; 
    ... 
}, 

et le composant est assez simple:

@Component(modules = {SomeModule.class, ...}) 
class SomeComponent { 
    ... 
    void inject(Example example); 
    ... 
}, 

et je les ai besoin de créer un autre des objets, nous allons les appeler d, e, quelque chose comme ceci:

public Example(){ 
    DaggerSomeComponent.builder().build().inject(this); 
    ... 
    this.d = new D(c); 
    this.e = new E(d, a, b); 
    ... 
} 

Ma question est: est-il possible d'arriver à quelque chose comme ça?

class Example { 
    ... 
    @Inject A a; 
    @Inject B b; 
    @Inject C c; 
    @Inject D d; 
    @Inject E e; 
    ... 
    public Example(){ 
     DaggerSomeComponent.builder().build().inject(this); 
     ... 
    } 
} 

Répondre

1

Oui, @Provides methods can take parameters. Dagger crée des instances avant d'appeler la méthode.

@Provides D provideD(C c){return new D(c)}; 
@Provides E provideE(A a, B b, D d){return new E(d, a, b)};