android - Dagger 2 注入多个接口和实现 class
android - Dagger 2 injecting multiple interface and the implementation class
所以我想构建多模块 android 项目,但在注入接口和实现时遇到问题。
我有两个用于片段之间导航的界面
第一个界面
interface Fragment1Navigation {
fun navigateToFragment1()
fun navigateToFragment2()
}
第二个界面
interface Fragment2Navigation {
fun navigateToFragment3()
fun navigateToFragment4()
}
然后我有实现这两个接口的class
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
}
}
我想在我的 mainActivity 中注入这个 Navigator class 以首先绑定我的 navcontroller 并且我想在其他片段中注入接口并且我制作了这样的模块 class
@Module()
class NavigationModule {
@Provides
@Singleton
fun provideNavigator(): Navigator = Navigator()
@Provides
fun provideFragment1Navigation(): Fragment1Navigation = Navigator()
@Provides
fun provideFragment2Navigation(): Fragment2Navigation = Navigator()
}
我希望那些 provideFragmentNavigation 和 provideNavigatioin 提供相同的 Navigator(),因此片段中的界面会导致与主界面中相同的导航器 activity,但事实证明它提供了不同的实例,因此片段中的界面会导致不同的导航器来自 mainactivity
的导航器
您可以通过两种方式实现:
- 使用
@Binds
而不是 @Provides
- 将
Navigation()
对象直接传递给 NavigationModule
的 constructor
使用binds
class Navigator @Inject constructor(): BaseNavigator(), Fragment1Navigation, Fragment2Navigation {
// body
}
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
}
所以我想构建多模块 android 项目,但在注入接口和实现时遇到问题。
我有两个用于片段之间导航的界面
第一个界面
interface Fragment1Navigation {
fun navigateToFragment1()
fun navigateToFragment2()
}
第二个界面
interface Fragment2Navigation {
fun navigateToFragment3()
fun navigateToFragment4()
}
然后我有实现这两个接口的class
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
}
}
我想在我的 mainActivity 中注入这个 Navigator class 以首先绑定我的 navcontroller 并且我想在其他片段中注入接口并且我制作了这样的模块 class
@Module()
class NavigationModule {
@Provides
@Singleton
fun provideNavigator(): Navigator = Navigator()
@Provides
fun provideFragment1Navigation(): Fragment1Navigation = Navigator()
@Provides
fun provideFragment2Navigation(): Fragment2Navigation = Navigator()
}
我希望那些 provideFragmentNavigation 和 provideNavigatioin 提供相同的 Navigator(),因此片段中的界面会导致与主界面中相同的导航器 activity,但事实证明它提供了不同的实例,因此片段中的界面会导致不同的导航器来自 mainactivity
的导航器您可以通过两种方式实现:
- 使用
@Binds
而不是@Provides
- 将
Navigation()
对象直接传递给NavigationModule
的
constructor
使用binds
class Navigator @Inject constructor(): BaseNavigator(), Fragment1Navigation, Fragment2Navigation {
// body
}
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
}