在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 。 为什么它不适合我?
我看不到在PersistentDatabase中注入KotlinReactiveEntityStore的位置。 你只需在提供的方法中创建一个实例,但是没有注入完成。