如何在Android上使用Kotlin在Dagger 2模块中获取组件依赖关系?

时间:2018-08-01 00:21:49

标签: android kotlin dagger-2

我在Android上有一个Dagger2 Component的{​​{1}}。我通过动态注入片段来初始化组件。现在,我需要为片段模块的依赖项提供活动上下文。我以为使用Fragment作为参数编写提供程序方法将自动为我获取模块中的Fragment引用,并且可以从中提取上下文。但是我不能编译我的代码。

该应用程序组件还提供了一个上下文,因此我添加了一个限定符以获取活动上下文。我认为那不会造成任何问题。这是我的代码:

Fragment

编译错误:

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class FragmentScope

@FragmentScope
@Component(modules = [FragmentModule::class],
        dependencies = [AppComponent::class])

interface FragmentComponent {
    fun inject(myFragment: MyFragment)

    @Component.Builder
    interface Builder {
        fun appComponent(component: AppComponent): Builder
        fun build(): FragmentComponent
    }
}

@Module
object FragmentModule {
    @Provides
    @JvmStatic
    @Named("Fragment")
    fun provideContext(myFragment: MyFragment): Context = myFragment.context!!
}

1 个答案:

答案 0 :(得分:1)

我认为您误解了inject的{​​{1}}方法。这将触发对片段的注入,而不是片段对组件的注入。如果要从片段中获取活动的上下文,则必须在初始化期间将其传递给模块。

FragmentComponent