Не могу понять, как использовать dagger в моем приложении. Похоже, это случай циклической зависимости

#android #kotlin #dependency-injection #dagger-2

#Android #котлин #зависимость-инъекция #dagger-2

Вопрос:

Ниже приведен график зависимостей моего приложения. Конструктор GameView выглядит следующим образом

 class GameView (
    private var gameActivity: GameActivity,
    private val screenWidth: Int,
    private val screenHeight: Int
) : SurfaceView(gameActivity), Runnable {
}
  

Конструктор GameView принимает экземпляр GameActivity в качестве параметра. Это случай циклической зависимости? Потому что зависимость GameActivity — это GameView, а зависимость GameView — это также GameActivity. Как разрешить такие циклические зависимости. Может кто-нибудь, пожалуйста, поделиться кодом для обработки такого сценария.
введите описание изображения здесь
В приведенном выше графике зависимостей, если я хочу передать экземпляр GameView в ShooterPlane, это вызовет цикл зависимости. Как избежать таких циклов зависимостей?
ссылка на исходный код
https://github.com/kpradeepkumarreddy/DaggerBirdShooter

Ответ №1:

Если у вас циклическая зависимость, единственное решение, которое я нашел, — это использовать
Lazy<T> в ShooterPlane Больше информации в документации dagger2 И после этого нам Lazy.get, когда вам нужен просмотр игры в shooterPlane

 class ShooterPlane(private val gameView: Lazy<GameView>) {
fun someMethod(){
    gameView.get().someMethodInGameView()
}
  

Неудобство этого решения заключается в том, что инъекция напрямую влияет на параметр вашего конструктора.
Но это работа, и я думаю, что это несколько советов, как избежать этого недостатка