2017-07-26 86 views
0

我有問題,我不知道爲什麼,但我的變量不注入並等於null。對於模型商店提供Dagger 2中的方法

@Provides 
@Singleton 
fun provideSource(context: Context): DatabaseSource = DatabaseSource(context, Models.DEFAULT, DB_NAME, DB_VERSION) 

@Provides 
@Singleton 
fun provideStoreDB(databaseSource: DatabaseSource): KotlinReactiveEntityStore<Store> = KotlinReactiveEntityStore(KotlinEntityDataStore(databaseSource.configuration)) 

@Provides 
@Singleton 
@NotNull 
fun provideStores() : Database<Store> = PersistentDatabase(Store::class) 

和類: 我提供的方法是這樣

它是從類「持久化」的繼承人。

@Entity 
data class Store(val id: Long = 0, val name: String = "", val description: String = "", val date: String = "") : DisplayableItem, Persistable 

類與DB

@Singleton 
class PersistentDatabase <T: Any> (val type: KClass<T>) : Database <T> { 
    @Inject 
    internal lateinit var store: KotlinReactiveEntityStore<T> 

    override fun addResult(item: T): Completable = store.insert(item).toCompletable() 

    override fun addListResult(item: List<T>): Completable = store.insert(item).toCompletable() 

    override fun deleteResult(item: T): Completable = store.delete(item) 

    override fun getAllResults(): Single<List<T>> = (store select type).get().observable().toList() 

    override fun removeAllResults(): Completable = store.delete(type).get().single().toCompletable() 
} 

作品在我的倉庫層我用這樣的:

@Inject 
lateinit var database: Database<DetectedLanguageText> 

fun getHistory(): Single<List<DetectedLanguageText>> { 
    return database.getAllResults() 
      .map { it.sortedByDescending { it.date } } 
      .transitSuccessToEmitter(historyEmitter) 
} 

但是,當我在功能getAllResults變量

@Inject 
    internal lateinit var store: KotlinReactiveEntityStore<T> 

不注入並等於null。爲什麼它不適合我?

回答

1

我看不到在PersistentDatabase中注入KotlinReactiveEntityStore的位置。您只需在提供的方法中創建一個實例,但不會進行注入。

+0

here:(dog)Inject internal lateinit var store:KotlinReactiveEntityStore

+1

是的,你將字段標記爲可注入的,但是你手動創建了一個實例,不是嗎?所以這是由你來設置這個領域。如果創建實例,Dagger將注入字段。 – Guliash

+1

如果使用'@ Inject'註釋字段,則必須調用'component.inject(myObject)'注入其字段。你沒有包含任何暗示你這樣做的代碼。 –

相關問題