Dagger 2 - не генерирует классы xxxModule_xxxFactory - PullRequest
0 голосов
/ 09 ноября 2019

Я работаю с 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 и как я могу заставить кинжал генерировать их? Что мне здесь не хватает? Я использовал такой кинжал в других проектах, и у меня не было этой проблемы раньше.

Спасибо

1 Ответ

0 голосов
/ 09 ноября 2019

РЕДАКТИРОВАТЬ.

Для кого-то еще, имеющего эту проблему.

Я пропустил зависимость Dagger Compiler в модуле, содержащем классы Room.

зависимость:

kapt com.google.dagger:dagger-compiler:$dagger_version

или annotationProcessor, если вы используете JAVA вместо Kotlin.

...