在Dagger中,您可以在 Presenter 中将您的activity
注入为 View ,请遵循以下示例
启动模块
@Module
class SplashModule {
@Provides
fun provideXUseCase(
xRepository: XRepository
) = XUseCase(xRepository)
@Provides
fun provideSplashPresenter(
view: SplashView,
xUseCase: XUseCase
): SplashPresenter = SplashPresenter(
view,
xUseCase
)
}
查看模块
@Module
abstract class ViewModule {
@Binds
abstract fun provideSplashView(activity: SplashActivity): SplashView
}
活动模块
@Module
abstract class ActivitiesModule {
@ContributesAndroidInjector(modules = [SplashModule::class, ViewModule::class])
abstract fun bindSplashActivity(): SplashActivity
}
我试图在ToothPick中找到如何做的方法,但是找不到任何正式文档或博客文章!
谢谢?
答案 0 :(得分:0)
是的,您可以以非常相似的方式进行操作。
您可以有一个将视图接口绑定到InstanceProvider的模块(您可以将其定义为lambda)
在演示者中,您将View声明为@Inject,然后在初始化过程中调用Toothpick.inject()。
唯一棘手的部分是照顾范围树。当我这样做时,我既使用了Application范围,也使用了Activity范围,并且只在Activity级别声明了View的绑定,然后演示者调用具有相同范围的inject,并且一切正常。
需要Activity范围,因此每次创建新的Activity时,我们都会覆盖InstanceProvider(并且View具有新的引用,并且如果范围相同,我还记得旧的缓存)
我希望我能正确解释。怎么做尚不明显,但一旦所有步骤都准备就绪,便很有意义。