Vuol dire che devo creare un modulo/componente separato per ogni activitiy?
Sì. E no
Al meno è necessario creare un nuovo componente oggetto per ogni attività, se si desidera fornire attività di ambito dipendenze, come il Activity
stesso, il LoaderManager
, o cose simili, perché la portata sarà solo vivere fintanto che l'attività.
La questione di sapere se avete bisogno di un modulo e componenti per ogni singolo uno dei tuoi attività dipende fortemente dalla vostra architettura. Inoltre potresti essere in grado di creare un generico ActivityModule
fornendo il modello, il presentatore e la vista che potresti riutilizzare.
Si potrebbe anche andare bene con un solo Component
ad es. se sono necessari solo le dipendenze di base delle attività come la LoaderManager
o Activity
in sé allora si può scrivere un ActivityModule
per fornire solo quegli oggetti di base. È quindi possibile utilizzare questo modulo con il proprio componente per fornire le dipendenze. Se il Presenter (e le sue dipendenze) possono essere creati dall'iniezione del costruttore si potrebbe andare bene con un singolo componente e modulo per tutte le vostre attività.
Se il presentatore e la vista sono le interfacce che vengono implementati si avrebbe bisogno di creare un modulo che prevede la realizzazione vera e propria, però.
Qual è lo scopo delle annotazioni di ambito personalizzato se sono ancora responsabile della creazione e del rilascio di tali dipendenze?
Scopes sono usati per fare la gestione di tali dipendenze più facile. Come accennato, l'ambito di attività muore con l'attività che viene distrutta. Avendo quelle dipendenze di ambito si può essere sicuri che nulla dipende dalla vostra attività che ha una portata/durata superiore e potrebbe causare perdite di memoria.
Inoltre, mi piace pensarlo come un insieme di dipendenze che puoi scambiare a caldo e semplicemente "buttare via". Un buon esempio è uno @UserScope
che manterrà i dati utente, i suoi dati di sessione, sessione, ...
Se cambio utente, ho solo bisogno di buttare fuori tutto con un scope utente o meno (chiudi attività, rimuovi UserComponent) e tutto per quanto riguarda l'utente è andato. Il prossimo può effettuare il login e il rischio di effetti collaterali è basso.
Scopes sono per lo più di compilazione controlli orari che aiuto si mettono gerarchia nelle vostre dipendenze, dal momento che tutto il compilatore non è controllare che non ci siano cicli in esso e che nulla chiede le dipendenze da un ambito che non può accedere.
Suppongo, sì, almeno sarà necessario un componente separato per ciascuna attività in cui si desidera utilizzare l'iniezione dall'ambito personalizzato. Se vuoi fare iniezioni dal tuo ambito globale che non è necessario. Per lo scopo: nel tuo ambito personalizzato puoi ad es. fornire una dipendenza all'attività senza creare una perdita di memoria. Ma sono d'accordo con te. Questo non è ancora chiaro per me. – Christopher