Abbiamo imparato a conoscere l'iniezione di costruttori.
Ora impareremo a conoscere l'iniezione di campo.
Salve amici e bentornati.
L'iniezione di campi è una tecnica di dependency injection in cui le dipendenze vengono iniettate
direttamente nelle proprietà dei campi della classe tramite annotazioni, senza passarle attraverso il costruttore.
Questo viene comunemente fatto usando l'annotazione inject in framework come Hilt o Dagger.
Si usa principalmente quando l'iniezione del costruttore non è possibile o pratica,
come nel caso di classi, attività o frammenti del framework Android.
Quindi, quando la classe è gestita da un'attività del framework, da un'attività o da
un frammento di Android, quando non si controlla la creazione dell'oggetto, Android istanzia
le attività e quando le dipendenze non possono essere passate tramite il costruttore.
Questo approccio è meno comune dell'iniezione del costruttore in Kotlin, perché i campi sono tipicamente
privati e Kotlin incoraggia fortemente l'immutabilità e l'iniezione del costruttore per la risoluzione delle dipendenze.
Tuttavia, se l'iniezione di campo è necessaria per i framework o per casi d'uso specifici.
Dagger può aiutare a gestirlo usando l'annotazione inject.
Quando si parla di pugnale, si intende l'elsa.
Pugnale.
Lo stesso concetto.
Ok, solo un breve riepilogo e un breve...
Differenza tra il costruttore e l'iniezione di campo.
Le dipendenze dell'iniezione del costruttore sono passate attraverso il costruttore.
Mentre nell'iniezione di campo, le dipendenze vengono iniettate direttamente nei campi.
L'iniezione del costruttore è preferibile per i componenti non Android.
Mentre l'iniezione di campo è comune nelle classi Android come le attività e i frammenti.
Le dipendenze nell'iniezione del costruttore sono valori immutabili, mentre le dipendenze sono immutabili.
Nell'iniezione di campo, l'iniezione del costruttore var o late initiate var è più facile da testare dell'iniezione di campo.
Leggermente più difficile da testare se non viene maneggiato con cura.
Non preoccupatevi.
Prendiamo un esempio di field injection e impariamo a conoscere questo tipo di dipendenza.
Torniamo all'esempio precedente.
Qui abbiamo aggiunto l'elsa e le dipendenze e abbiamo usato anche
il plugin Kapt e qui abbiamo aggiunto elsa e Kapt.
Anche nel Build.gradle che si trova a livello di progetto, abbiamo creato le classi engine e car.
Ora voglio che vi concentriate con me nella classe di motori.
Non ci sono cambiamenti perché si tratta di una dipendenza.
Dobbiamo iniettarlo.
Abbiamo quindi a che fare con la classe del motore, che è una classe di dipendenza.
Nessuna modifica per la classe di dipendenza.
Passare all'auto all'interno della classe dipendente, che è l'auto di cui dobbiamo rimuovere il costruttore di iniezione.
Qui si utilizza l'iniezione del costruttore.
Non abbiamo più bisogno di usarlo.
Dobbiamo passarlo e utilizzarlo come iniezione di campo.
Iniziare con l'iniezione tardiva.
Avviare il motore var.
È di tipo motore.
In questo caso, l'annotazione "inietta" è posizionata sul campo del motore.
Dagger inietterà un'istanza del motore nel campo in fase di esecuzione.
Quindi, invece di iniettare il motore nel costruttore,
lo iniettiamo come campo all'interno di questa classe.
Passiamo al modulo dell'applicazione.
Qui non abbiamo bisogno di altro.
L'autovettura in dotazione.
Noi forniamo solo il motore.
Poiché car utilizza l'iniezione di campo, non ha bisogno di un costruttore o di fornire un'annotazione per car.
Tuttavia, il motore deve comunque richiedere l'iniezione del costruttore o un modulo per gli scenari più complessi.
Il terzo passo è il componente dell'app.
Il componente collega il modulo e le classi che richiedono l'iniezione.
È necessario modificare il codice.
Rimuovere questa funzione.
Creerò una nuova funzione inject e passerò il parametro car.
Questa funzione indica a dagger di iniettare le dipendenze nei campi della classe auto.
Quindi questa funzione inietterà l'istanza dell'auto.
Passare al file principale.
È necessario modificare il codice.
Il componente dell'applicazione rimarrà lo stesso.
Dobbiamo creare un'istanza dell'auto, creando un costruttore di auto.
Poi dobbiamo iniettare le dipendenze nel campo dell'auto.
Componente dell'app.
Punto.
Iniettare.
Auto.
Usare l'auto.
Stampa.
Auto.
Guida.
Inoltre, se andiamo alla macchina si può vedere println.
Non è quindi necessario usare println.
Eseguite di nuovo l'applicazione ed ecco fatto.
Il motore è stato avviato.
In questo video abbiamo imparato a conoscere l'iniezione di campo,
sostituendo all'interno dell'auto l'iniezione del costruttore con l'iniezione del campo.
Abbiamo creato una proprietà di campo chiamata engine e annotata con inject.
Abbiamo modificato il componente dell'app per iniettare l'auto, iniettare i campi della classe auto e poi
abbiamo modificato il codice all'interno della funzione principale, creato la nostra istanza e poi iniettato nell'app.
componente App, iniettiamo l'auto e poi la chiamiamo per testare l'applicazione.