0

在 Dagger 中,您可以在Presenter中注入您的activityas视图,请按照以下示例进行操作,

飞溅模块

@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 中找到如何做到这一点,但找不到任何官方文档或博客文章!

谢谢

4

1 回答 1

1

是的,您可以以非常相似的方式进行操作。

您可以拥有一个将视图接口绑定到 InstanceProvider 的模块(您可以将其定义为 lambda)

在演示者中,您将视图声明为@Inject,然后调用 Toothpick.inject() 作为初始化的一部分。

唯一棘手的部分是处理范围树。当我这样做时,我使用了一个应用程序范围和一个活动范围,并且只在活动级别声明了视图的绑定,然后演示者调用注入相同的范围,它应该可以正常工作。

需要 Activity 范围,因此每次创建新 Activity 时我们都会覆盖 InstanceProvider (并且 View 有一个新引用,如果范围相同,我记得旧的引用已缓存)

我希望我解释得当。如何做到这一点并不明显,但一旦所有部件都到位,它就有意义了。

于 2019-07-28T16:03:22.220 回答