Я работаю с Dagger2 в многомодульном проекте, и у меня есть проблема с одним модулем, в частности.
У меня есть база данных Room, которую я добавляю в классы репозитория. Модуль для этого выглядит примерно так:
@Module
class RoomModule(app: Application) {
private val database = AppDatabase.getInstance(app)
@Provides
@Singleton
fun provideModelDao() = database.getModelDao()
@Provides
@Singleton
fun provideAnotherModelDao() = database.getAnotherModelDao()
}
И мои классы репозитория выглядят так:
class ModelRepository @Inject constructor(private val modelDao: ModelDao) {
fun doFooWithModel() {
// Do foo
}
}
Мои классы репозитория используются классами UseCase, которые выглядят примерно так:
class DoFooUseCase @Inject constructor(private val repository: ModelRepository) {
fun doFoo() {
repository.doFooWithModel()
}
}
И, наконец, я использую этот класс UseCase в классе реализации WebClient
.
class MyWebClient @Inject constructor(private val fooUseCase: DoFooUseCase): WebClient() {
// Web client stuff
}
Здесь нет проблем.
Проблема возникает, когда явнедрить WebClient в действие.
class WebActivity : AppCompatActivity() {
@Inject
lateinit var webClient: MyWebClient
override fun onCreate(savedStateInstance: Bundle?) {
super.onCreate(savedStateInstance)
AndroidInjection.inject(this)
webView.webViewClient = webClient
}
}
Теперь, после построения проекта, я получаю эту ошибку:
MyApplicationComponent.java:24: error: cannot find symbol:
RoomModule_ProvideModelDAOFactory;
Но, как ни странно, когда я удаляю аннотацию @Inject
из действия компонент Dagger строится правильно. Но очевидно, что приложение не работает, потому что lateinit var
не вводится.
Что это за классы xxFactory
и как я могу заставить кинжал генерировать их? Что мне здесь не хватает? Я использовал такой кинжал в других проектах, и у меня не было этой проблемы раньше.
Спасибо