koin模块中的参考活动

时间:2019-11-13 15:38:30

标签: android kotlin dependency-injection koin

我有一个活动申请。

在我的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 Module

val appModule = module {
    viewModel { SharedViewModel() }

    single { MainActivity.getInstance() as RegistrationNavigator }
}

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

1 个答案:

答案 0 :(得分:0)

Android生命周期化的组件(例如活动)不应放在koin模块中。

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

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