Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dagger 2 : Back to basics

Dagger 2 : Back to basics

Slides de mon talk sur Dagger 2 à la Droidcon Paris.

Jeremie Martinez

November 10, 2015
Tweet

More Decks by Jeremie Martinez

Other Decks in Programming

Transcript

  1. Dagger 1 Créé en 2012 par Jesse Wilson (Guice) Encadré

    par Bob Lee (Guice, JSR330, Guava, CTO Square) Ouvert en mai 2013 Dernière version en Juillet 2014 (1.2.2) 13
  2. Bilan Rapide et facile JSR330 Compatible Utilisable sur Android Annotation

    Processing Ouvert à la communauté Java Introspection sur les classes Pas totalement au compile time Analyse pas totalement statique Proguard 14
  3. Dagger 2 Repris par la Java Core Librairies Team Assisté

    par Square Release en avril 2015 Résout les problématiques restantes de la version 1 16
  4. API Fournir les dépendances : @Provides et @Module Demander des

    dépendances : @Inject Lier les modules et les injections : @Component Implémenter le pattern singleton : @Singleton 18
  5. Par constructeur public class ApiManager { private final Api api;

    @Inject public ApiManager(Api api) { this.api = api; } … } 21
  6. Par field public class ApiManager { private Api api; @Inject

    public void setApi(Api api) { … } … } 25
  7. Par field public class ApiManager { private Api api; @Inject

    public void setApi(Api api) { … } … } Not supported 26
  8. Scope - Exemple Application Scope UserScope UserScope Activity Scope ActivityScope

    ActivityScope Activity Scope ActivityScope ActivityScope DetailsActivity ListActivity LoginActivity LoginActivity ListActivity DetailsActivity Connexion Changement 37 Deconnexion
  9. Scope “(sous-)Graphe local à durée de vie limitée” Par exemple

    : • Singleton • PerActivity •PerUser • PerRequest 38
  10. Named Injection par chaine de caractères Un seul qualifier par

    dépendance @Inject @Named("userPrefs") SharedPreferences userPrefs;
 @Inject @Named("appPrefs") SharedPreferences appPrefs; @Provides @Named("userPrefs") public SharedPreferences providesUserPrefs() @Provides @Named("appPrefs") public SharedPreferences providesAppPrefs() 42
  11. Tests - Unitaires public class ApiManager { private final EventBus

    bus; private final Api api; @Inject public ApiManager(EventBus bus, Api api) { … } … } 45
  12. Tests - Unitaires @RunWith(MockitoJUnitRunner.class) public class ApiManagerTest { @Mock EventBus

    bus; @Mock Api api; @InjectMocks ApiManager apiManager; @Test public should_call_backend() { … } … } 46
  13. Tests - Fonctionnels Build variant sur l’Android Gradle Plugin Mock

    des modules Dupliquer les configurations 48