1

I'm trying to build an app with the following architecture: LoginActivity -> MainActivity -> everything else handled in fragments hosted by MainActivity. I'm also using the Kodein Framework for the first time and get the following error in my starting fragment:

Property delegate must have a 'provideDelegate(HomeFragment, KProperty*>' method. None of the following functions is suitable. provideDelegate(Context [highlighted in red], KProperty<>?) defined in org.kodein.di.android.KodeinPropertyDelegateProvider Type 'KodeinPropertyDelegateProvider' has no method 'getValue(HomeFragment, KProperty<>)' and thus it cannot serve as a delegate

This is my code so far:

class HomeFragment : Fragment(), KodeinAware {

override val kodein by kodein()
private val factory : MainViewModelFactory by instance()
private lateinit var viewModel: MainViewModel

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val binding : FragmentHomeBinding = FragmentHomeBinding.inflate(inflater, container, false)

    viewModel = ViewModelProviders.of(this, factory).get(MainViewModel::class.java)
    binding.viewModel = viewModel

    return binding.root
}

}

How can I fix this?

Thanks :)

susosaurus
  • 459
  • 10
  • 28

3 Answers3

1

Nevermind, adding a type declaration after kodein did the trick... :)

susosaurus
  • 459
  • 10
  • 28
  • Hi, I just changed `override val kodein by kodein()` to `override val kodein: Kodein by kodein()` and it worked. Hope it helps! – susosaurus May 18 '20 at 20:13
  • 2
    Not working in case of fragments. Need to use 'import org.kodein.di.android.x.kodein' in case of fragment but for activity 'import org.kodein.di.android.kodein' works fine. Can you elaborate the difference between both imports? – Arsh Doda May 19 '20 at 07:02
1

In your imports change

import org.kodein.di.android.kodein

to

import org.kodein.di.android.x.kodein
Haider Malik
  • 1,581
  • 1
  • 20
  • 23
0

You can do it like this:

override val kodein:Kodein by kodein()
Eric Aya
  • 69,473
  • 35
  • 181
  • 253
Manju S B
  • 101
  • 1
  • 4