I'm doing an Android project using Android Studion 3.3 Canary that uses Kodein and when I run it I get the following error:
Caused by: org.kodein.di.Kodein$NotFoundException: No binding found for bind<ApixuWeatherApiService>() with ? { ? }
Registered in this Kodein container:
bind<ElTiempoRepository>() with singleton { ElTiempoRepositoryImpl }
bind<TiempoNetworkDataSource>() with singleton { TiempoNetworkDataSourceImpl }
bind<TiempoActualDao>() with singleton { TiempoActualDao }
bind<ConnectivityInterceptor>() with singleton { ConnectivityInterceptorImpl }
bind<TiempoAcutalViewModelFactory>() with provider { TiempoAcutalViewModelFactory }
bind<ApixuWeatherApiService.Companion>() with singleton { ApixuWeatherApiService.Companion }
bind<ElTiempoDatabase>() with singleton { ElTiempoDatabase }
module androidModule {
bind<ConsumerIrManager>() with provider { ConsumerIrManager }
bind<PowerManager>() with provider { PowerManager }
bind<UsageStatsManager>() with provider { UsageStatsManager }
bind<String>(tag = "packageCodePath") with provider { String }
E/AndroidRuntime:
bind<File>(tag = "cache") with provider { File }
bind<AudioManager>() with provider { AudioManager }
bind<NotificationManager>() with provider { NotificationManager }
bind<AppWidgetManager>() with provider { AppWidgetManager }
bind<MediaSessionManager>() with provider { MediaSessionManager }
bind<ApplicationInfo>() with provider { ApplicationInfo }
bind<Resources.Theme>() with provider { Resources.Theme }
bind<File>(tag = "externalCache") with provider { File }
bind<HardwarePropertiesManager>() with provider { HardwarePropertiesManager }
bind<TvInputManager>() with provider { TvInputManager }
bind<UiModeManager>() with provider { UiModeManager }
bind<CameraManager>() with provider { CameraManager }
bind<File>(tag = "obb") with provider { File }
bind<BatteryManager>() with provider { BatteryManager }
bind<ContentResolver>() with provider { ContentResolver }
bind<KeyguardManager>() with provider { KeyguardManager }
bind<UserManager>() with provider { UserManager }
bind<DevicePolicyManager>() with provider { DevicePolicyManager }
bind<SharedPreferences>() with provider { SharedPreferences }
bind<SharedPreferences>() with factory { String -> SharedPreferences }
bind<TelephonyManager>() with provider { TelephonyManager }
bind<DropBoxManager>() with provider { DropBoxManager }
bind<WifiManager>() with provider { WifiManager }
bind<AppOpsManager>() with provider { AppOpsManager }
bind<ClipboardManager>() with provider { ClipboardManager }
bind<ConnectivityManager>() with provider { ConnectivityManager }
bind<SensorManager>() with provider { SensorManager }
bind<AccountManager>() with provider { AccountManager }
bind<CarrierConfigManager>() with provider { CarrierConfigManager }
bind<SearchManager>() with provider { SearchManager }
bind<AccessibilityManager>() with provider { AccessibilityManager }
bind<String>(tag = "packageName") with provider { String }
bind<InputManager>() with provider { InputManager }
bind<String>(tag = "packageResourcePath") with provider { String }
bind<TelecomManager>() with provider { TelecomManager }
bind<ActivityManager>() with provider { ActivityManager }
bind<LauncherApps>() with provider { LauncherApps }
bind<Vibrator>() with provider { Vibrator }
bind<AssetManager>() with provider { AssetManager }
bind<AlarmManager>() with provider { AlarmManager }
bind<JobScheduler>() with provider { JobScheduler }
bind<SystemHealthManager>() with provider { SystemHealthManager }
bind<NsdManager>() with provider { NsdManager }
bind<Set<AndroidContextGetter>>() with bindingSet { Set<AndroidContextGetter> }
bind<DisplayManager>() with provider { DisplayManager }
bind<PackageManager>() with provider { PackageManager }
bind<ShortcutManager>() with provider { ShortcutManager }
bind<MidiManager>() with provider { MidiManager }
bind<WallpaperManager>() with provider { WallpaperManager }
bind<Resources>() with provider { Resources }
bind<CaptioningManager>() with provider { CaptioningManager }
bind<NfcManager>() with provider { NfcManager }
bind<InputMethodManager>() with provider { InputMethodManager }
bind<LayoutInflater>() with provider { LayoutInflater }
bind<StorageManager>() with provider { StorageManager }
bind<RestrictionsManager>() with provider { RestrictionsManager }
bind<PrintManager>() with provider { PrintManager }
E/AndroidRuntime:
bind<MediaProjectionManager>() with provider { MediaProjectionManager }
bind<SubscriptionManager>() with provider { SubscriptionManager }
bind<UsbManager>() with provider { UsbManager }
bind<LocationManager>() with provider { LocationManager }
bind<NetworkStatsManager>() with provider { NetworkStatsManager }
bind<Looper>() with provider { Looper }
bind<WifiP2pManager>() with provider { WifiP2pManager }
bind<MediaRouter>() with provider { MediaRouter }
bind<BluetoothManager>() with provider { BluetoothManager }
bind<FingerprintManager>() with provider { FingerprintManager }
bind<DownloadManager>() with provider { DownloadManager }
bind<TextServicesManager>() with provider { TextServicesManager }
bind<File>(tag = "files") with provider { File }
bind<WindowManager>() with provider { WindowManager }
bind<Application>() with provider { Application }
}
at org.kodein.di.internal.KodeinContainerImpl.factory(KodeinContainerImpl.kt:174)
at org.kodein.di.KodeinContainer$DefaultImpls.factory$default(KodeinContainer.kt:33)
at org.kodein.di.KodeinContainer$DefaultImpls.provider(KodeinContainer.kt:80)
at org.kodein.di.internal.KodeinContainerImpl.provider(KodeinContainerImpl.kt:7)
at org.kodein.di.KodeinContainer$DefaultImpls.provider$default(KodeinContainer.kt:79)
at org.kodein.di.internal.DKodeinBaseImpl.Instance(DKodeinImpl.kt:33)
at com.novadev.eltiempomvvm.ElTiempoApplication$kodein$1$5.invoke(ElTiempoApplication.kt:42)
at com.novadev.eltiempomvvm.ElTiempoApplication$kodein$1$5.invoke(ElTiempoApplication.kt:19)
at org.kodein.di.bindings.Singleton$getFactory$1$1$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.SingletonReference.make(references.kt:34)
at org.kodein.di.bindings.Singleton$getFactory$1$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.Singleton$getFactory$1$1.invoke(standardBindings.kt:99)
at org.kodein.di.bindings.MultiItemScopeRegistry.getOrCreate(scopes.kt:62)
at org.kodein.di.bindings.Singleton$getFactory$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.Singleton$getFactory$1.invoke(standardBindings.kt:99)
at org.kodein.di.KodeinContainer$provider$$inlined$toProvider$1.invoke(curry.kt:14)
at org.kodein.di.internal.DKodeinBaseImpl.Instance(DKodeinImpl.kt:33)
at com.novadev.eltiempomvvm.ElTiempoApplication$kodein$1$6.invoke(ElTiempoApplication.kt:45)
at com.novadev.eltiempomvvm.ElTiempoApplication$kodein$1$6.invoke(ElTiempoApplication.kt:19)
at org.kodein.di.bindings.Singleton$getFactory$1$1$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.SingletonReference.make(references.kt:34)
at org.kodein.di.bindings.Singleton$getFactory$1$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.Singleton$getFactory$1$1.invoke(standardBindings.kt:99)
at org.kodein.di.bindings.MultiItemScopeRegistry.getOrCreate(scopes.kt:62)
at org.kodein.di.bindings.Singleton$getFactory$1.invoke(standardBindings.kt:134)
at org.kodein.di.bindings.Singleton$getFactory$1.invoke(standardBindings.kt:99)
at org.kodein.di.KodeinContainer$provider$$inlined$toProvider$1.invoke(curry.kt:14)
at org.kodein.di.internal.DKodeinBaseImpl.Instance(DKodeinImpl.kt:33)
at com.novadev.eltiempomvvm.ElTiempoApplication$kodein$1$7.invoke(ElTiempoApplication.kt:42)
at com.novadev.eltiempomvvm.ElTiempoApplication$kodein$1$7.invoke(ElTiempoApplication.kt:19)
at org.kodein.di.bindings.Provider$getFactory$1.invoke(standardBindings.kt:89)
at org.kodein.di.bindings.Provider$getFactory$1.invoke(standardBindings.kt:83)
at org.kodein.di.KodeinContainer$provider$$inlined$toProvider$1.invoke(curry.kt:14)
at org.kodein.di.KodeinAwareKt$Instance$1.invoke(KodeinAware.kt:152)
at org.kodein.di.KodeinProperty$provideDelegate$1.invoke(properties.kt:39)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
E/AndroidRuntime:
at com.novadev.eltiempomvvm.ui.tiempo.actual.TiempoActualFragment.getViewModelFactory(Unknown Source:25)
at com.novadev.eltiempomvvm.ui.tiempo.actual.TiempoActualFragment.onActivityCreated(TiempoActualFragment.kt:39)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2460)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2646)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2416)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2372)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2466)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1335)
at android.app.Activity.performStart(Activity.java:7043)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2755)
... 9 more
The code where the error is given is this (line 39):
class TiempoActualFragment : Fragment(), KodeinAware {
override val kodein by closestKodein()
private val viewModelFactory: TiempoAcutalViewModelFactory by instance()
private lateinit var viewModel: TiempoActualViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.tiempo_actual_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(TiempoActualViewModel::class.java)
bindUI()
}
private fun bindUI() = GlobalScope.launch {
val tiempoAct = viewModel.tiempo.await()
tiempoAct.observe(this@TiempoActualFragment, Observer{
// comprobacion si el observer devuelve null
if(it == null) return@Observer
textView.text = it.toString()
})
}
}
My implementation of Koedeis dependency is this:
// Kodein
implementation "org.kodein.di:kodein-di-generic-jvm:$kodein_version"
implementation "org.kodein.di:kodein-di-framework-android-x:$kodein_version"
And the Kodein version is:
ext.kodein_version = '5.2.0'
Did something similar happen to someone? Thanks.