我刚刚将Dagger添加到了我的Android项目中。我已经将某些类重新设计为Dependency Injection模式,并在其构造函数上使用了@Inject批注。我还创建了相应的模块和组件。当我尝试编译它时,模块中的某些@Provides方法给我这个错误:
error: @Provides methods cannot be static
所有导致我出现此错误的方法都是@Singleton,是静态的,没有参数。我也有一些@Provides方法,它们是@Singleton和static方法,但至少具有一个参数,并且这些方法不会给出任何错误。
有人知道这些错误的原因吗?根据官方的《用户指南》,Dagger 2应该支持静态@Provides方法。
@Module
public class DataModule {
@Provides
@Singleton
static MessageDatabaseAdapter provideMessageDatabaseAdapter() { //this method gives error
return new MessageDatabaseAdapter();
}
@Provides
@Singleton //this method seems OK
static MessageDataSource provideMessageDataSource(MessageDatabaseAdapter databaseAdapter) {
return new MessageDataSource(databaseAdapter);
}
@Provides
@Singleton
static ContactsDataSource provideContactsDataSource() { //this method also gives error
return new ContactsDataSource();
}
}
答案 0 :(得分:0)
问题是我在项目中添加了旧版本的Dagger。以我为例,它是2.0,但在我撰写本文时,最新版本是2.17,这是上述的《用户指南》。