我可以使用@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
   

    ...
}

以上是我可以使用@Injectlateinitvarnavigator:AppNavigatorImpl而不是@BindsabstractfunbindNavigator(impl:AppNavigatorImpl):AppNavigator?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>