在Dagger 2中提供方法

时间:2017-07-26 03:36:07

标签: java android kotlin dagger-2

我有问题,我不知道为什么但我的变量不注入并且等于null。 我提供这样的方法:

@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 个答案:

答案 0 :(得分:1)

我看不到你在PersistentDatabase中注入KotlinReactiveEntityStore的位置。您只需在提供方法中创建一个实例,但不会执行注入。