Java 在匕首2中提供方法

Java 在匕首2中提供方法,java,android,kotlin,dagger-2,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): K

我有问题,我不知道为什么,但我的变量不注入,等于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)
@Inject
lateinit var database: Database<DetectedLanguageText>

fun getHistory(): Single<List<DetectedLanguageText>> {
    return database.getAllResults()
            .map { it.sortedByDescending { it.date } }
            .transitSuccessToEmitter(historyEmitter)
}
与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()
}
@Singleton
类PersistentDatabase(val类型:KClass):数据库{
@注入
内部lateinit变量存储:KotlinResactiveEntityStore
重写fun addResult(项:T):Completable=store.insert(项).toCompletable()
重写fun addListResult(项:列表):Completable=store.insert(项).toCompletable()
覆盖乐趣删除结果(项:T):Completable=store.delete(项)
override fun getAllResults():Single=(存储选择类型).get().observable().toList()
重写fun removeAllResults():Completable=store.delete(type).get().single().toCompletable()
}
在我的存储库层中,我使用它的方式如下:

@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)
@Inject
lateinit var database: Database<DetectedLanguageText>

fun getHistory(): Single<List<DetectedLanguageText>> {
    return database.getAllResults()
            .map { it.sortedByDescending { it.date } }
            .transitSuccessToEmitter(historyEmitter)
}
@Inject
lateinit var数据库:数据库
fun getHistory():单身{
return database.getAllResults()
.map{it.sortedByDescending{it.date}
.TransitsAccessToEmitter(历史发射器)
}
但是当我在函数中时,getAllResults变量

    @Inject
    internal lateinit var store: KotlinReactiveEntityStore<T>
@Inject
内部lateinit变量存储:KotlinResactiveEntityStore

不注入并等于null。为什么它对我不起作用?

我看不出您在PersistentDatabase中的何处注入了KotlinReactiveEntityStore。您只需在provides方法中创建一个实例,但不进行注入

这里:(dog)注入内部lateinit var存储:kotlinreactiveEntityStore是的,您将字段标记为可注入,但您手动创建了一个实例,不是吗?因此,您可以设置此字段。Dagger将在创建实例时注入字段。如果使用
@inject
注释字段,则必须调用
组件.inject(myObject)
来注入其字段。您没有包含任何提示您这样做的代码。@Guliash不,我怎么做?我认为当我将变量存储为时,fun provideStoreDB应该自动调用Inject@Loxpozizni,为什么不将KotlinReactiveEntityStore作为参数添加到构造函数中?in-you模块为提供方法的add参数,应该很有趣。