我使用导航组件有一个单个活动和多个片段样式的应用程序。
我正在使用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()) }