Dagger2 ambito di attività, quanti moduli / componenti ho bisogno?

Ho un paio di domande su ambiti personalizzati:

  1. Sto utilizzando MVP architecutre e ho bisogno di iniettare presentatori diversi a diverse attività. A tal fine ho creato @ActivityScope. Significa che devo creare un module / componente separato per each attività?
  2. Qual è lo scopo delle annotazioni di portta personalizzate se sono ancora responsabile della creazione e della liberazione di queste dependencies? Non sono sicuro se ho ragione, ma posso usare @ Scope123 in tutti i miei moduli / componenti e non farà alcuna differenza.

  • Pugnale che non genera componenti per class di prova
  • Il metodo del module constructor componente Dagger 2.2 è deprecato
  • Dagger2 e Android
  • Posso solo iniettare super class quando uso dagger2 per l'iniezione di dipendenza?
  • Impostare l'URL di base dinamico utilizzando Retrofit 2.0 e Dagger 2
  • Dagger 2 esempi
  • Il metodo del module constructor componente Dagger 2.2 è deprecato
  • Come impostare l'iniezione di dipendenza DAGGER da zero in un progetto Android?
  • Come organizzare i moduli ei componenti Dagger 2?
  • Dagger 2: Fornire la stessa istanza tra più componenti con lo stesso field di applicazione su diversi moduli di libreria
  • Come aggiungere codec g729 nell'applicazione Android?
  • Pugnale che non genera componenti per class di prova
  • 2 Solutions collect form web for “Dagger2 ambito di attività, quanti moduli / componenti ho bisogno?”

    Significa che devo creare un module / componente separato per each attività?

    Sì. E no.

    Alless bisogna creare un nuovo object componente per each attività se si desidera fornire dependencies di attività come l' Activity stessa, LoaderManager o cose simili, perché l'ambito sarà sufficiente a vivere fino a quando l'attività.

    La questione se hai bisogno di un module e di un componente per each singola attività dipende fortemente dalla tua architettura. Inoltre potresti essere in grado di creare un generico ActivityModule fornisca il tuo model, il tuo presentatore e la vista che potresti riutilizzare.

    Potresti anche essere soddisfacente con una sola Component ad esempio se sono necessarie solo dependencies di base dell'attività, come il LoaderManager o l' Activity stessa, allora è ansible scrivere un ActivityModule per fornire tali oggetti di base. È quindi ansible utilizzare questo module con il componente per fornire le dependencies. Se il tuo presentatore (e le sue dependencies) può essere creato dall'iniezione del constructor, potrebbe essere utile con un singolo componente e un module per tutte le tue attività.

    Se il tuo presentatore e la vista sono interfacce che vengono implementate, è necessario creare un module che fornisce l'implementazione effettiva.

    Qual è lo scopo delle annotazioni di portta personalizzate se sono ancora responsabile della creazione e della liberazione di queste dependencies?

    Gli ambiti sono utilizzati per facilitare la gestione di queste dependencies. Come detto, l'ambito di attività muore con l'attività che viene distrutta. Avendo queste dependencies circoscritte si può essere sicuri che nulla dipende dalla tua attività che ha una portta / durata più elevata e potrebbe causare perdite di memory.

    Inoltre, mi piace pensare come fasci di dependencies che puoi scambiare a caldo e semplicemente "buttare fuori". Un buon esempio è un @UserScope che contenga i dati utente, il suo login, i dati di session, …
    Se faccio passare gli utenti ho solo bisogno di buttare tutto fuori con una portta dell'utente o less (attività vicina, rimuovere UserComponent) e tutto ciò che riguarda l'utente è andato. Il successivo può accedere, e c'è un basso rischio di effetti collaterali.

    Gli obiettivi sono per lo più controlli di compilazione che ti aiutano a portre la gerarchia nelle dependencies , in quanto tutto il compilatore fa controllare che non ci sono loops e che nulla richiede dependencies da un ambito che non può accedere.

    1. Il modo più semplice per fare ciò è di creare un componente di livello di applicazione nel desiderio di fornire each tipo di presentatore. Il problema è che avrai tutte le classi di tutto quello che proietti allo stesso livello che è un po 'brutto. Il modo piacevole è creare un module per un'attività che inietta le dependencies per l'attività / frammento attuali

    2. Utilizzando @ActivityScope o qualsiasi altra cosa solo mostrate il module ha una durata diversa da @Singleton, finché non è un singleton, considerate che il module muore la stessa attività che ha creato.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.