如何在kodein中调用的第二时间重新绑定模块?

时间:2018-09-29 05:04:34

标签: android kotlin dependencies kotlin-android-extensions kodein

我有一个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 :(得分:0)

当您调用kodein.instance()时,您将获得绑定的一个实例,并且由于您的绑定类型是单例:您将获得与先前相同的实例,并且仅创建一次,因此不再存在,因此InitializingCurrentAddressProvider(keyStore,instance (),instance(),applicationContext,i)仅被调用一次。将单例切换到提供程序以查看每次执行instance(),InitializingCurrentAddressProvider(keyStore,instance(),instance(),applicationContext,i)时都调用InitializingCurrentAddressProvider(keyStore,instance(),instance(),applicationContext,i)。 / p>