AndroidDev-social / DodoForMastodon

🐘 Mastodon client for Android, iOS and Desktop (JVM)
GNU General Public License v3.0
384 stars 29 forks source link

[FEAT]: add Dependency injection #17

Closed Czeach closed 1 year ago

Czeach commented 2 years ago

Description

Set up Hilt (or Dagger) library for dependency injection

Additional Information

No response

crocsandcoffee commented 2 years ago

Should we consider Koin instead? If we truly want to go multiplatform? There are performance tradeoffs between these DI frameworks.

Build times will be faster with Koin but that shouldn't be the sole reason for it... Let's chat more about this 😃

evant commented 2 years ago

If you want something like dagger that supports multiplatform 😉 https://github.com/evant/kotlin-inject

svenjacobs commented 2 years ago

Hm, Hilt / Dagger would only be possible for Android. But this is a multiplatform project. I personally think the project should just use custom DI. Using the same solution for the whole project, even shared code. With Kotlin's default parameter values it's pretty simple, less overhead.

thebino commented 2 years ago

I would recommend, using Koin. It has support for multiplatform https://insert-koin.io/docs/reference/koin-mp/kmp

svenjacobs commented 2 years ago

I really don't see the benefit of using Koin. You still have to write modules. Kotlin's default parameter values solve 90% of all DI needs imho. In my personal project I was using Koin before, then migrated to custom DI and was saving so much lines of code 🤩

svenjacobs commented 2 years ago

Just have a look here, another project of mine, where I removed Hilt and replaced it with custom DI. Look at how much LOC I could save 🤩 For everything where default parameters are not sufficient, I use objects that I call containers (examples here and here).

digitalbuddha commented 2 years ago

My vote is to use https://github.com/evant/kotlin-inject

It is to the jsr330 spec and works in kmp. Plus Evan is here to do support if it fails 😆

bitPogo commented 2 years ago

I vote for koin, since it is the solution I had less trouble with in different KMP/KMM project.