Я пытаюсь написать игру на Android с характеристиками кинжала 2. У меня проблема с @ Singleton.
Я создал модуль:
@Module
class SharedModule {
@Singleton
@Provides
fun getDeviceService(): DeviceService = DeviceService()
@Provides
@Singleton
fun getAssetsService(): AssetsService = AssetsService()
@Singleton
@Provides
fun getGameService(): GameService = GameService()
}
и компонент
@Singleton
@Component(modules = [SharedModule::class])
interface SharedComponent {
fun inject(app: MazeSlayers)
fun inject(screen: SplashScreen)
}
, но при попытке ввести объекты я получил всегда новый экземпляр этого класса приложения:
class MazeSlayers : Game() {
@Inject
lateinit var assetsService: AssetsService
@Inject
lateinit var gameService: GameService
override fun create() {
DaggerSharedComponent.create().inject(this)
gameService.game = this
assetsService.add(Asset.LOGO)
this.setScreen(SplashScreen())
}
override fun render() {
super.render()
}
}
и SplashScreen
class SplashScreen : ScreenAdapter() {
lateinit var batch: SpriteBatch
var img: Texture? = null
@Inject
lateinit var deviceService: DeviceService
@Inject
lateinit var assetsService: AssetsService
@Inject
lateinit var gameService: GameService
override fun show() {
DaggerSharedComponent.create().inject(this)
batch = gameService.batch
img = assetsService.getTexture(Asset.LOGO)
}
...
Что я делаю не так?
[РЕШЕНИЕ]
Один общий kotlin объект решил мою проблему
object DI {
val shared: SharedComponent = DaggerSharedComponent.create()
}