Я только что добавил Dagger в свой Android-проект. Я переработал некоторые из моих классов в соответствии с шаблоном внедрения зависимостей и использовал аннотацию @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();
}
}
@HemantParmar ОК, поделился одним из проблемных модулей.
ты сюда смотрел - https://stackoverflow.com/questions/38607503/static-provide- метод-в-кинжале2
@VadimEksler Да, но это не очень полезно, так как только обсуждает, почему использовать статические методы \ @Provides, а не почему мой код не работает ...
ваш класс MessageDatabaseAdapter статичен?
@HemantParmar да, это отдельный класс в собственном java файле
Какую версию Dagger вы добавили? 2,17?
@EpicPandaForce спасибо, это была проблема. Я добавил 2.0, который, вероятно, действительно не поддерживает статические методы предоставления.
Проблема заключалась в том, что я добавил в свой проект старую версию Dagger. В моем случае это была версия 2.0, но на момент написания этой статьи последней версией была 2.17, для которой было создано вышеупомянутое руководство пользователя.
поделитесь своим кодом.