【发布时间】:2019-09-18 08:38:16
【问题描述】:
在 koin 中有没有 javax.inject.Provider 的替代品?
为了对操作做出反应,我将命令注入到我的活动中。 Command 是单次运行的对象,例如 WriteToFile。
用匕首我可以这样:
class MainPresenter : Presenter() {
@Inject
lateinit var writeFile: Provider<WriteFileCommand>
fun onSaveClicked() {
writeFile.get().run()
}
}
in koin,当我尝试使用时:
class MainPresenter : Presenter() {
lateinit var writeFile: Provider<WriteFileCommand> by inject()
fun onSaveClicked() {
writeFile.get().run()
}
}
我的 koin 模块:
val appModule = module {
factory { WriteFileCommand(get(), get()) }
factory { FileProvider() }
single { DataStore() }
}
比我得到的错误提示:
由于错误,无法为“Factory [name='WriteFileCommand',class='com.test.WriteFileCommand']”创建定义: 未找到兼容的定义。检查你的模块定义
我知道我可以打电话:
var command: WriteFileCommand = StandAloneContext.getKoin().koinContext.get()
command.run()
但是看起来很麻烦
【问题讨论】:
-
请添加您迄今为止尝试过的内容以及您的设置和简化模块。到目前为止,这个问题太宽泛了。注射本身有问题吗?您对依赖项的定义有疑问吗?
标签: android dependency-injection dagger-2 koin