koin 中是否有 javax.inject.Provider 的替代方案?
为了对操作使用react,我将命令注入(inject)到我的 Activity 中。 Command 是单次运行对象,例如 WriteToFile。
在 Dagger 中我可以这样做:
class MainPresenter : Presenter() {
@Inject
lateinit var writeFile: Provider<WriteFileCommand>
fun onSaveClicked() {
writeFile.get().run()
}
}
在 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() }
}
我收到错误消息:
Can't create definition for 'Factory [name='WriteFileCommand',class='com.test.WriteFileCommand']' due to error : No compatible definition found. Check your module definition
我知道我可以调用:
var command: WriteFileCommand = StandAloneContext.getKoin().koinContext.get()
command.run()
但是看起来好麻烦
最佳答案
没有什么比直接提供者更好的了。如果您使用inject
,您将使用惰性委托(delegate)。如果您使用 get
,您将创建一个使用 factory
声明依赖项的新实例。所以 get
就是您的情况所需要的。只需让您的 MainPresenter
实现 KoinComponent
,您就可以直接使用 get
:
class MainPresenter : Presenter(), KoinCompontent {
fun onSaveClicked() = get<WriteFileCommand>().run()
}
关于android - koin 中的 Dagger2 Provider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57988484/