匕首2-错误:@Provides方法不能是静态的

时间:2018-08-08 11:23:29

标签: android dependency-injection dagger-2 dagger

我刚刚将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();
}

}

1 个答案:

答案 0 :(得分:0)

问题是我在项目中添加了旧版本的Dagger。以我为例,它是2.0,但在我撰写本文时,最新版本是2.17,这是上述的《用户指南》。