2015-04-25 17 views
22

Come creo un'istanza di Cane con un componente che fornisce Cat.Come creare un oggetto usando l'iniezione del costruttore?

public final class Dog { 
    private final Cat mCat; 
    public final static String TAG = "Dog"; 

    @Inject public Dog(Cat cat) { 
     mCat = cat; 
     Log.e(TAG, "Dog class created"); 
    } 
} 

Dopo aver sperimentato con Dagger 2 per un po 'non ho idea di come utilizzare l'iniezione costruttore - un suggerimento sarebbe bello, grazie.

Modifica:
Cosa c'è di sbagliato nella domanda? Dopo aver usato Dagger 2, seguendo diversi tutorial e leggendo la documentazione ufficiale, non ho idea di come usare la funzione di iniezione del costruttore, ecco perché chiedo qui. Invece di iniettare la dipendenza Cat in Dog con @Inject potrei scrivere un DogModule che fornisce un oggetto Dog, ma Dog sarebbe solo una normale classe Java. L'iniezione sul campo funziona alla grande (ci sono molti esempi che mostrano come usarlo) ma cosa devo fare per usare l'iniezione del costruttore?

risposta

13

Per creare un oggetto utilizzando la funzione di iniezione del costruttore Dagger 2 è necessario aggiungere un metodo a un componente che fornisce una classe Cat.

@Component(
    dependencies = ApplicationComponent.class, 
    modules = CatModule.class) 
public interface ActivityComponent { 
    void inject(final CatActivity a); 
    // objects exposed to sub-components 
    Cat cat(); 
    Dog dog(); 
} 

Un'istanza di cane possono poi essere retrived chiamando [Component].dog().

final ActivityComponent comp = DaggerActivityComponent.builder() 
      .applicationComponent(app.getApplicationComponent()) 
      .build(); 

final Dog d = comp.dog(); 
+5

Questa risposta mi ha aiutato molto. Grazie! Tuttavia, mi chiedo ancora perché non ci siano esempi di inserimento delle dipendenze dei costruttori su un framework così popolare. – Salivan

Problemi correlati