当我编译我的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();
}
}
答案 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;