匕首2 - 无法初始化

时间:2017-06-22 17:55:00

标签: java android dagger-2

当我编译我的Android项目时,我发现了这样的错误:

错误:(15,13)错误:如果没有@ Provide-annotated方法,则无法提供android.content.Context。 android.content.Context在com ...提供.di.components.AppComponent.getContext()

我的组件:

@Singleton
@Component(modules = {AppModule.class})
public interface AppComponent {
    Context getContext();
    DataManager getDataManager();
}

我的模块:

@Module
public class AppModule {
    protected final Application mApplication;

    public AppModule(Application application) {
        mApplication = application;
    }

    @Provides
    @Singleton
    Application provideApplication() {
        return mApplication;
    }

    @Provides
    @ApplicationContext
    @Singleton
    Context provideContext() {
        return mApplication;
    }

    @Provides
    @Singleton
    DataManager provideDataManager() {
        return new DataManager();
    }
}

1 个答案:

答案 0 :(得分:1)

您的组件说它可以提供Context

@Singleton
@Component(modules = {AppModule.class})
interface AppComponent {
  Context getContext();
}

当它只知道@ApplicationContext Context时(注意限定符?):

@Module
class AppModule {

  @Provides
  @Singleton
  @ApplicationContext
  Context provideContext() {
    return mApplication;
  }
}

您可以删除@ApplicationContext限定符,只提供模块中的Context,如果您尝试同时提供活动上下文,或者保留您的限定符,则可能会妨碍提供合格的上下文:

@Singleton
@Component(modules = {AppModule.class})
interface AppComponent {
  @ApplicationContext
  Context getContext();
}

如果您尝试使用/注入应用程序上下文,则还需要使用限定符:

@ApplicationContext @Inject Context mContext;