2014-10-17 15 views
23

Qual è il modo migliore per utilizzare Dagger per iniettare dipendenze in classi, in particolare classi di costruttori zero-arg come Attività, con Dagger? Dagger 2 forse porterà miglioramenti alla situazione?Uso di Kotlin con Dagger

Grazie in anticipo.

risposta

32

Da Kotlin M13 rilascio, una nuova proprietà è stato appositamente aggiunto per supporto dipendenza iniezione (come con Dagger 1 & 2) e altri quadri.

Si chiama lateinit proprietà. Tratto da documentazione:

class Example { 
      @Inject 
      lateinit var bar: Bar 
} 

In poche parole, bar non ha initializers ma viene dichiarato come un tipo non nullo. Se si tenta di leggerlo prima dell'inizializzazione, viene generata un'eccezione.
Altrimenti, una volta inizializzato usando Dagger, può essere usato come una proprietà normale.

Tutto è ben spiegato nel language doc ed è anche possibile controllare lo blog post relative per il rilascio M13 lì.

+0

Come ritardare il tipo primitivo come Int, Long in kotlin –

1

Il pugnale si basa sull'elaborazione delle annotazioni, che non è ancora supportato in Kotlin, per quanto ne so. Ma dicono, è programmato. E mentre, puoi estendere le classi java con le dipendenze di Dagger, o provare qualche framework di iniezione basato sulla riflessione - Guice, Roboguice

+1

L'elaborazione delle annotazioni è supportata. Il problema è nel simbolo '$' nel codice generato –

+0

@EugenMartynov Sei riuscito a farlo funzionare? Dagger 1 e altre librerie, facendo affidamento sull'elaborazione delle annotazioni. – naixx

13

Non stavo aggiornando la mia risposta per un po 'e divenne obsoleto. Inoltre ho notato qui la nuova risposta di @Ben che funziona per M13/M14.

Ho deciso che sarebbe meglio se reindirizzassi tutti gli interessati al mio progetto di modello che cerco di tenere aggiornato con gli ultimi versi di Kotlin e Dagger 2. Kotlin + Dagger 2 sample

sto descrivendo lì come iniettare oggetti, compresi più annotazioni ecc

+0

Hai un progetto di esempio che posso guardare? –

+1

@cypressious Ho creato un progetto di modello. https://github.com/damianpetla/kotlin-dagger-example –