我可以使用@Injectlateinitvarnavigator:AppNavigatorImpl而不是@BindsabstractfunbindNavigator(impl:AppNavigatorImpl):AppNavigator?
我是通过学习依赖注入的文章与项目?
代码A需要navigator通过依赖注入实例化一个对象,所以作者使用代码B来实现它,你可以在这里看到它。
很奇怪这个类在Code C中通过依赖注入AppNavigatorImpl实现了类AppNavigator,所以我觉得Code D会很好用。
我可以用 @Inject lateinit var navigator: AppNavigatorImpl代替@Binds abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator吗?
代码 A
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var navigator: AppNavigator
...
}
代码 B
@InstallIn(ActivityComponent::class)
@Module
abstract class NavigationModule {
@Binds
abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator
}
代码 C
class AppNavigatorImpl @Inject constructor(private val activity: FragmentActivity) : AppNavigator {
override fun navigateTo(screen: Screens) {
val fragment = when (screen) {
Screens.BUTTONS -> ButtonsFragment()
Screens.LOGS -> LogsFragment()
}
activity.supportFragmentManager.beginTransaction()
.replace(R.id.main_container, fragment)
.addToBackStack(fragment::class.java.canonicalName)
.commit()
}
}
代码 D
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var navigator: AppNavigatorImpl
...
}
THE END
二维码