【发布时间】:2018-03-02 15:19:24
【问题描述】:
如何将@ActivityScoped 的模块注入片段中。
我在 Fragment 中需要的模块看起来像这样(它很好地注入到活动中)
@ActivityScoped
class ClipManager @Inject constructor(private val activity: Activity) { ... }
要将我的MainActivity 绑定到Activity,我使用的是ActivityModule
@Module
abstract class MainActivityModule {
@Binds
@ActivityScoped
internal abstract fun bindActivity(mainActivity: MainActivity): Activity
}
为了能够注入我的MainActivity 我使用这个
@Module
abstract class ActivityModule {
@ActivityScoped
@ContributesAndroidInjector(modules = [MainActivityModule::class])
internal abstract fun mainActivity(): MainActivity
}
我有以下匕首组件:
@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
}
}
使用常规上下文绑定ApplicationModule
@Module
abstract class ApplicationModule {
@Binds
@Singleton
internal abstract fun bindContext(application: Application): Context
}
现在我有了FragmentModule,它可以注入片段
@Module
abstract class FragmentModule {
@FragmentScoped
@ContributesAndroidInjector
internal abstract fun fragment1(): Fragment1
}
如何扩展 dagger 以便能够将 ClipManager 注入到 Fragment1(它本身位于 MainActivity 中)?
【问题讨论】:
标签: android dependency-injection kotlin dagger-2