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。爲什麼它不適合我?
here:(dog)Inject internal lateinit var store:KotlinReactiveEntityStore –
是的,你將字段標記爲可注入的,但是你手動創建了一個實例,不是嗎?所以這是由你來設置這個領域。如果創建實例,Dagger將注入字段。 – Guliash
如果使用'@ Inject'註釋字段,則必須調用'component.inject(myObject)'注入其字段。你沒有包含任何暗示你這樣做的代碼。 –