J'essaie de créer une bibliothèque Android parallèlement à un autre projet tout en apprenant DI avec Dagger 2. Cela s'avère plus difficile que prévu.Injection de dépendances avec Dagger 2
Ma question
Je suis en train d'utiliser une classe singleton appelé MySingleton
que je veux accéder à la fois ma bibliothèque Android ainsi que l'application principale.
Configuration actuelle
Fondamentalement, j'ai une classe singleton appelé MySingleton
dans mon projet de bibliothèque Android. Dans le projet, j'ai une classe appelée SingletonModule
qui est un module Dagger2 qui fournit mon singleton comme ça.
@Provides @Singleton
MySingleton providesMySingleton() {
return new MySingleton();
}
Ok, maintenant dans mon application actuelle dans j'ai le composant suivant.
@Singleton
@Component(modules = {SingletonModule.class})
public interface ApplicationComponent {
void inject(MyApplication application);
}
Donc ceci est utilisé pour injecter MySingleton
dans la classe MyApplication
. Ca le fait comme ça.
this.applicationComponent = DaggerApplicationComponent.builder()
.singletonModule(new SingletonModule()) // does it for you as empty constructor
.build();
applicationComponent.inject(this);
Ce grand et est l'instance de MySingleton
que je l'injection par domaine fonctionne bien.
Ce que j'ai essayé
Dans mon projet de bibliothèque Android J'ai créé un nouveau composant appelé SingletonComponent
qui a fait la même chose que ApplicationComponent
, vient de donner l'objet MySingleton
. Puis dans la classe MyService
qui s'étend Service
j'ai injecté, par champ, l'objet MySingleton
. Cela n'a pas eu l'effet que j'avais après. Il a objecté un objet MySingleton
mais ce n'était pas la même instance que celle créée lors de l'injection dans mon application actuelle. Je crois que c'est parce que c'est un nouveau composant que je crée ...
Qu'est-ce que je fais mal ici?
J'ai regardé de nombreux sites différents et suivi de nombreux tutoriels, mais quelque chose ne clique pas avec cette injection de dépendance.
Je dois pouvoir injecter des modules dans des classes dans ma bibliothèque. Que faire si j'ai un composant créé dans ma bibliothèque (peut-être une sorte de singleton) que je passe ensuite dans mon composant Application qui utilise ensuite cette instance? – StuStirling
Dans la mesure où je vous comprends, vous aurez besoin de quelque chose comme: '@Component (dépendances = LibraryComponent.class, modules = MyAppModule.class)' pour votre composant d'application. De cette façon, votre composant d'application inclura le composant lib et pourra utiliser ses objets (ce qui est essentiellement la signification de l'option 2). – Ognyan
Je vais lier votre propre question que je viens de trouver qui m'a aidé à le résoudre. http://stackoverflow.com/questions/31354735/how-to-migrate-missing-inject-from-module-with-complete-false-from-dagger-1-to C'est exactement ce dont j'avais besoin. – StuStirling