gpt4 book ai didi

android - 将 @ActivityScoped 对象注入(inject) Fragment

转载 作者:搜寻专家 更新时间:2023-11-01 07:43:48 24 4
gpt4 key购买 nike

如何将 @ActivityScoped 的模块注入(inject)到 fragment 中。

我在 Fragment 中需要的模块看起来像这样(它很好地注入(inject)到 Activity 中)

@ActivityScoped
class ClipManager @Inject constructor(private val activity: Activity) { ... }

要将我的 MainActivity 绑定(bind)到 Activity,我正在使用 ActivityModule

@Module
abstract class MainActivityModule {

@Binds
@ActivityScoped
internal abstract fun bindActivity(mainActivity: MainActivity): Activity
}

为了能够注入(inject)我的MainActivity,我使用了这个

@Module
abstract class ActivityModule {

@ActivityScoped
@ContributesAndroidInjector(modules = [MainActivityModule::class])
internal abstract fun mainActivity(): MainActivity
}

我有以下 Dagger 组件:

@Singleton
@Component(modules = [
ApplicationModule::class,
AndroidSupportInjectionModule::class,
ActivityModule::class,
FragmentModule::class])
interface AppComponent : AndroidInjector<App> {

@Component.Builder
interface Builder {

@BindsInstance
fun application(application: Application): AppComponent.Builder

fun build(): AppComponent
}
}

使用常规上下文绑定(bind) ApplicationModule

@Module
abstract class ApplicationModule {

@Binds
@Singleton
internal abstract fun bindContext(application: Application): Context
}

现在我有了 FragmentModule 可以注入(inject) fragment

@Module
abstract class FragmentModule {

@FragmentScoped
@ContributesAndroidInjector
internal abstract fun fragment1(): Fragment1
}

我如何扩展 dagger 以便能够将 ClipManager 注入(inject)到 Fragment1(它本身位于 MainActivity 中) ?

最佳答案

您需要使 FragmentComponent 成为 ActivityComponent 的子组件。这样做将允许 Fragment 注入(inject)任何绑定(bind)在其父组件中的内容。

您真正需要做的就是从您的 AppComponent 上的模块列表中删除 FragmentModule::class 并将其添加到您的 ActivityComponent 中:

@Module
abstract class ActivityModule {

@ActivityScoped
@ContributesAndroidInjector(modules = [MainActivityModule::class, FragmentModule::class])
internal abstract fun mainActivity(): MainActivity
}

这样它将成为您的 MainActivityComponent 的子组件。

关于android - 将 @ActivityScoped 对象注入(inject) Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49072077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com