我在没有上下文的情况下使用Dagger 2注入一个适配器并且它正在工作,但是当我传递上下文参数时我无法做到。错误就像这样
error: android.content.Context cannot be provided without an @Provides-annotated method.
Dagger组件
@PerActivity
@Component(dependencies = ApplicationComponent.class, modules = MainFragmentModule.class)
public interface MainFragmentComponent {
void inject(MainFragment mainFragment);
@ActivityContext
Context provideContext();
}
片段模块
@Module
public class MainFragmentModule {
private MainFragmentContract.View mView;
private Activity mActivity;
Context mContext;
MainFragmentModule(MainFragmentContract.View view, Context context) {
mView = view;
mContext = context;
}
@Provides
MainFragmentContract.View providesView() {
return mView;
}
@Provides
@ActivityContext
Context provideContext() {
return mContext;
}
}
适配器
@Inject
public ConversationAdapter(MainFragmentPresenter mainPresenter, Context context) {
mMainFragmentPresenter = mainPresenter;
mContext =context;
}
答案 0 :(得分:4)
你告诉匕首,你提供了一个具体的背景:
@ActivityContext
Context provideContext();
然后你要求匕首向你的适配器注入另一种类型的上下文 - 一个没有用@ActivityContext
注释。
相反,您应该明确定义,您愿意提供这种类型的上下文:
@Inject
public ConversationAdapter(..., @ActivityContext Context context) {
...
}