使用Dagger 2将Context或Activity传递给适配器

时间:2017-08-03 09:04:35

标签: android dependency-injection dagger-2 dagger

我在没有上下文的情况下使用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;
    }

1 个答案:

答案 0 :(得分:4)

你告诉匕首,你提供了一个具体的背景:

@ActivityContext
Context provideContext();

然后你要求匕首向你的适配器注入另一种类型的上下文 - 一个没有用@ActivityContext注释。

相反,您应该明确定义,您愿意提供这种类型的上下文:


    @Inject
    public ConversationAdapter(..., @ActivityContext Context context) {
        ...
    }