【问题标题】:Reference activity in koin Modulekoin 模块中的参考活动
【发布时间】:2019-11-13 15:38:30
【问题描述】:

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

我的 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 }
}

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

【问题讨论】:

    标签: android kotlin dependency-injection koin


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      相关资源
      最近更新 更多