我在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!!
}
答案 0 :(得分:1)
我认为您误解了inject
的{{1}}方法。这将触发对片段的注入,而不是片段对组件的注入。如果要从片段中获取活动的上下文,则必须在初始化期间将其传递给模块。
FragmentComponent