带有DI工具的FindNavController



我使用导航组件有一个单个活动和多个片段样式的应用程序。

我正在使用koin作为我的di。我想按照干净的体系结构的假设在应用程序中创建一个导航器类。

这个假设的班级看起来像:

class Navigator(private val navHostFragment: NavHostFragment)
{
    fun toStudentsProfile():Unit
    {
        val action = HomeFragmentDirections.toStudentsProfile()
        navHostFragment.findNavController().navigate(action)
    }
    fun toTeachersProfile():Unit
    {
        val action = HomeFragmentDirections.toTeachersProfile()
        navHostFragment.findNavController().navigate(action)
    }
}

我现在的问题是我应该如何在koin容器下创建它?

val platformModule = module {
    single { Navigator("WHAT CAN BE DONE HERE") }
    single { Session(get()) }
    single { CoroutineScope(Dispatchers.IO + Job()) }
}

此外,koin组件在准备好之前就准备好了,因此它将无法满足依赖性,首先。

是否有一种方法可以为Koin提供类的实例,然后开始使用它?

koin允许在注入上使用参数

val platformModule = module {
    factory { (navHostFragment: NavHostFragment) -> Navigator(navHostFragment) }
    single { Session(get()) }
    single { CoroutineScope(Dispatchers.IO + Job()) }
}

我已将依赖性称为工厂,我想也可以将其范围范围范围划分到该活动中。将其宣布为单个会导致行为不当,好像是重新创建了活动(因此NAVHOSTFRAGMENT(,导航器对象将引用被摧毁的NavHostFragment。

由于片段将是navhostfragment的孩子,您可以在片段中获取导航对象:

val navigator: Navigator by inject { parametersOf(requireParentFragment()) }

相关内容

  • 没有找到相关文章

最新更新