繁体   English   中英

koin 模块中的参考活动

[英]Reference activity in koin Module

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

我的 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实现重构为单独的 class ,您可以从您的 koin 模块中提供该实例。 如果需要依赖于生命周期的参数,例如Context (或NavController ),请将它们作为 function 参数提供。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM