koin模块中的参考活动



我有一个单独的活动应用程序。

My MainActivity在许多依赖注入模块中被引用,作为这些接口的实现者。我目前有一个工作,这不是很理想。

class MainActivity : TransaktActivity(), RegistrationNavigator, IAuthPresenter,
IAuthButtonNavigator {
override fun navigateAwayFromAuth() {
navController.navigate(R.id.homeFragment)
}
override fun navigateToAuthPin(buttonId: Int) {
//todo navigate to auth with pin fragment
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_mainActivity = this
setContentView(R.layout.activity_main)
}
companion object {
private var _mainActivity: MainActivity? = null
fun getInstance() = _mainActivity
}
}
interface RegistrationNavigator {
fun navigateToCardDetails()
fun navigateToOtpCapture()
fun navigateToLoading()
fun navigateOutOfCardRegistration()
}

appModule是Koin模块

val appModule = module {
viewModel { SharedViewModel() }
single { MainActivity.getInstance() as RegistrationNavigator }
}

实现这一目标的首选方式是什么?

Android生命周期组件(如活动(不应位于koin模块中。

例如,您将遇到配置更改等问题,因为在重新创建活动后,koin模块将提供对过时活动的引用。

我并没有真正使用NavController,而是推出了自己的导航解决方案。作为一种通用方法,我会将RegistrationNavigator实现重构为一个单独的类,您可以从koin模块中提供该类的实例。如果需要依赖生命周期的参数,如Context(或NavController(,请将其作为函数参数提供。

最新更新