#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()
}
Неудобство этого решения заключается в том, что инъекция напрямую влияет на параметр вашего конструктора.
Но это работа, и я думаю, что это несколько советов, как избежать этого недостатка