Tes*_*Ktl 5 android module interface kotlin dagger-2
所以我想构建多模块化android项目,但在注入接口和实现方面遇到问题。
我有两个用于片段之间导航的界面
第一个界面
interface Fragment1Navigation {
fun navigateToFragment1()
fun navigateToFragment2()
}
Run Code Online (Sandbox Code Playgroud)
第二个接口
interface Fragment2Navigation {
fun navigateToFragment3()
fun navigateToFragment4()
}
Run Code Online (Sandbox Code Playgroud)
然后我有实现这两个接口的类
class Navigator: BaseNavigator(), Fragment1Navigation, Fragment2Navigation {
override fun navigateToFragment1() {
// some implementation
}
override fun navigateToFragment2() {
// some implementation
}
override fun navigateToFragment3() {
// some implementation
}
override fun navigateToFragment4() {
// some implementation
}
}
Run Code Online (Sandbox Code Playgroud)
我想在我的 mainActivity 中注入这个 Navigator 类以首先绑定我的导航控制器,我也想在其他片段中注入接口,我制作了这样的模块类
@Module()
class NavigationModule {
@Provides
@Singleton
fun provideNavigator(): Navigator = Navigator()
@Provides
fun provideFragment1Navigation(): Fragment1Navigation = Navigator()
@Provides
fun provideFragment2Navigation(): Fragment2Navigation = Navigator()
}
Run Code Online (Sandbox Code Playgroud)
我希望这些provideFragmentNavigation和provideNavigatioin提供相同的Navigator(),因此片段中的接口导致与主活动中相同的导航器,但事实证明它提供不同的实例,因此片段中的接口导致与主活动不同的导航器
有两种方法可以实现这一目标:
@Binds
而不是@Provides
Navigation()
对象直接传递给 constructor
ofNavigationModule
使用binds
class Navigator @Inject constructor(): BaseNavigator(), Fragment1Navigation, Fragment2Navigation {
// body
}
Run Code Online (Sandbox Code Playgroud)
Module
@Module()
abstract class NavigationModule {
@Binds
abstract fun provideNavigator(navigator: Navigator): BaseNavigator
@Binds
abstract fun provideFragment1Navigation(navigator: Navigator): Fragment1Navigation
@Binds
abstract fun provideFragment2Navigation(navigator: Navigator): Fragment2Navigation
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2558 次 |
最近记录: |