Как перепривязать модуль во время звонка в кодеин? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть приложение android, которое разработано в kotlin, также мы используем kodein зависимость для привязки данных. При первом связывании данных он будет привязан правильно, но не связывается при втором вызове.

inner class CallmyClass() : MultiDexApplication(), KodeinAware {

        val diModel = Kodein.Module {
            bind<ExchangeRateProvider>() with singleton { CryptoCompareExchangeProvider(this@App, instance()) }
            bind<SyncProgressProvider>() with singleton { SyncProgressProvider() }
            bind<WallethKeyStore>() with singleton { keyStore }
            bind<Settings>() with singleton { KotprefSettings }

            bind<CurrentTokenProvider>() with singleton { CurrentTokenProvider(instance()) }

            bind<AppDatabase>() with singleton { Room.databaseBuilder(applicationContext, AppDatabase::class.java, "maindb").build() }
            bind<NetworkDefinitionProvider>() with singleton { NetworkDefinitionProvider(instance()) }

            bind<CurrentAddressProvider>() with singleton { InitializingCurrentAddressProvider(keyStore, instance(), instance(), applicationContext,1) }

            bind<FourByteDirectory>() with singleton { FourByteDirectoryImpl(instance(), applicationContext) }

        }

        val appDiModule = Kodein.Module(allowSilentOverride = true) {
            import(diModel)
        }

        override val kodein: Kodein = Kodein {
            import(appDiModule)
        }
    }

проблема в том, что при первом связывании этот код будет оправдывать

bind<CurrentAddressProvider>() with singleton { InitializingCurrentAddressProvider(keyStore, instance(), instance(), applicationContext,i) }

и "InitializingCurrentAddressProvider()" этот класс вызывается и успешно выполняется.

НО, когда япопытайтесь вызвать эти строки

bind<CurrentAddressProvider>() with singleton { InitializingCurrentAddressProvider(keyStore, instance(), instance(), applicationContext,i) }

во второй раз, когда строка выполняется, но

"InitializingCurrentAddressProvider()" этот класс не выполняется.Вот в чем проблема, если второй класс будет выполнять, значит, я получу результат, тогда автоматически результат будет привязан.но это не выполняется.

1 Ответ

0 голосов
/ 10 февраля 2019

Когда вы вызываете kodein.instance (), вы получаете экземпляр вашей привязки, и потому что ваш тип привязки одноэлементный: вы получаете тот же экземпляр, что и предыдущий, и только один раз он будет создан, а не больше, поэтому InitializingCurrentAddressProvider (keyStore, instance(), instance (), applicationContext, i) вызывается только один раз.переключите singleton на провайдера, чтобы видеть, как вызывается InitializingCurrentAddressProvider (keyStore, instance (), instance (), applicationContext, i) каждый раз, когда вы получаете instance (), InitializingCurrentAddressProvider (keyStore, instance (), instance (), applicationContext, i).

...