Kotlin Multiplatform Broadcast
9.47K subscribers
838 photos
53 videos
1.13K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
kotlin-inject - DI для KMP с API Dagger и полной валидацией графа во время компиляции

#di
👍58👎3
Нашел Cheat Sheet от Kotzilla и инструкцию по миграции с Dagger/Hilt. на Koin (можно использовать в KMP проектах)

Чтобы вам не регаться я нашел прямую ссылку

#koin #hilt #android #di
👍32👎3👏3
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
📱 За что я ненавижу Koin или чего стоит избегать при его использовании (20 мин)

Я использую Koin еще с самой первой версии, он неплохо справляется с небольшими проектами, но дальше требует работы как самурай. В видео для патронов рассказываю, что не так с Koin, как этого избегаю и какой DI нужен для KMP.

Видео доступно
на Boosty и по подписке в Telegram.

#AndroidBroadcast #koin #di #kmp #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👎58👍24🔥3🤔1
Помните про kotlin-inject ? Это DI для KMP аналогичный Dagger с проверкой графа во время компиляции, так вот для него сделали Anvil подобные расширения 😂 - kotlin-inject-anvil.

Вот почему сразу нельзя сделать из коробки оригинальной библиотеки всё ? Тем более она даже не вышла в версию в 1.0, а из моего опыта с ней ей реально нужны API улучшения

#di #kmp #ksp
👎16👍7
"Koin: как сделать свой DI за 10 минут" - очень полезная статья с разбором того как сделать Koin подобный DI самостоятельно, что позволит понять как работает популярное решение

#di #koin #подкапотом
🔥24👍5
Уже на протяжении нескольких недель с перерывами пытаюсь завести Kotlin Inject вместо Koin. Использовать решение с KMP в многомодульном проекте совсем не получается. В чем причина так и не могу разобраться. Может в KSP, может в самом процессоре библиотеки, но любые попытки я пока оставляю. Если у кого-то это уже получалось - пишите в комментариях.

Исходный код моей попытки можно посмотреть тут

#kmp #di
8👍6
Вышел Koin Annotations 1.4.0 Stable
👉 Создание модулей на старте
👉 Поддержка WASM
👉 Поддержка Qualifier
👉 Поддержка object модулей
👉 Сканирование множества модулей для поиска объявление зависимостей
👉 Обновили документацию для KMP
👉 Улучшили валидацию объявлений во время компиляции
👉 Рефакторинг кодогенерации для KMP проектов для решения багов и улучшения скорости работы

#koin #di #wasm
🔥18👍9
Статья(EN,3м) с примером интеграции Koin с компонентами Decompose

#архитектура #di
👍151
🏝 Kimchi - KSP процесор с дополнительными аннотациями для kotlin-inject который позволяет удобно добавлять binding, модули и сабкомпоненты в многомодульных проектах.

Решение подобное Anvil для Dagger. Самое интересное - kotlin-inject-anvil уже есть 😁

#di
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍184
В рекомендациях пишут, что надо делать Inject диспатчеров, но не описывают как это сделать. Я реализую это с помощью собственного класса со всеми CoroutineDispatcher вместо того чтобы использовать квалификаторы для зависимостей в графе, например @Named()

#coroutines #di
👍37🎉1
Альтернативный вариант как делать inject CoroutineDispatcher в Dagger без дополнительного класса

#coroutines #di
👍58
Пример (EN,5м) использования изолированного экземпляра Koin. Будет полезно для авторов библиотек или если в своём приложении вы хотите отделить несколько графов.

#koin #di
👍18🎉3
Пример (EN,6м) использования Anvil расширений, но для Kotlin-Inject. Благодаря дополнениям работа с этим DI становится нормальной, потому что из коробки возможностей совсем не хватает

#kotlin #di
👍62
💉 Вышел официальный Koin плагин для Idea/Android Studio

Выпустили раннюю версию плагина Koin для Idea и Android Studio, чтобы решить проблемы с отсутствием проверки графа во время валидации и улучшения опыта работы с библиотекой.

В текущей версии доступен просмотр дерева конфигурации Koin, включающий модули, компоненты и зависимости. Также есть навигация между компонентами и зависимостями, что избавляет от поиска по кодовой базе.

Пока нет поддержки разделения на модули, граф строится один на всё. В будущем уже будет множество фичей. Авторы считают, что проверка графа в IDE лучше, чем только во время компиляции, и обеспечит анализ использования Koin в реальном времени.

На текущий момент доступ к плагину можно получить только через оформление заявки (я доступ получил и буду рассказывать детали).

#koin #di #androidstudio #idea
👍49🔥11
💉 Создатель и разработчик Koin поделился планами на будущее библиотеки (EN, 8 мин).

В статье представлен отчёт о текущем прогрессе и планах на ближайшие релизы (4.1 и 4.2):

👉 KMP API: появится KoinMultiplatformApplication, который упростит настройку библиотеки из common кода для всех платформ.

@Composable
fun App() {
KoinMultiplatformApplication(config = koinConfig) {
// ...
}
}


👉 В Composable функциях станет проще инжектировать динамические параметры:

fun MyComposable(
myFactory: MyFactory = koinInject(parameters = parametersOf("first_string"))
)


👉 Koin начнёт отслеживать, что именно он инжектирует в Composable функции, и будет очищать экземпляры после выхода из функции.

👉 Появятся Scope Archetype — шаблоны для управления зависимостями с scope. Это должно упростить работу. Выглядит похоже на Scope в Hilt: activityScope и другие.

👉 Идёт переработка DSL для описания зависимостей. Новый проект получил название koin-fu. Также появится плагин компилятора Kotlin для лучшего анализа метаданных и конфигурации графа зависимостей. Это упростит жизнь разработчикам.

👉 Koin Annotations 2.1: будет поддержка аннотаций @Inject и @Component из JSR 330. Это шаг в сторону функциональности Dagger и Hilt. 🤯

👉 Добавится поддержка Ktor 3.

Версия статьи без VPN: ссылка. (Ставьте 🔥, если стоит добавлять такие ссылки.)

#kmp #kotlin #di #koin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥783🎉3👍2
Metro — Kotlin DI фреймворк, вдохновленный Dagger, Anvil и Kotlin-Inject. Принципиальное отличие — работает через плагин компилятора, а не KSP. Пока нет релизов, всё в разработке.

Мне его только что прислали. Буду разбираться и пробовать, расскажу о нём на 🪙 Boosty

#kotlin #kmp #di
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔30👍5👎4
💉 Koin Annotations 2.0 Stable

Koin Annotations — надстройка над Koin для описания зависимостей с помощью аннотаций и последующей генерации части графа для них.

Что нового в движке:
👉 Совместимость с KSP2
👉 Улучшена работа компилятора DI кода
👉 Улучшена генерация кода
👉 Полноценная поддержка KMP проектов
👉 Шаринг описаний зависимостей между модулями проектов
👉 Работает с Koin 4.0, Kotlin 2.0.21 и KSP 2.0.21-1.0.28

Новые фичи для разработчиков:
👉 Создание собственных аннотаций квалификаторов
👉 Автоматические биндинги
👉 ComponentScan работает сквозь Gradle модули
👉 Аннотации над ViewModel (работает с Jetpack и KMP)
@KoinViewModel
class MyViewModel(deps: Deps): ViewModel()


Ссылка без VPN

#kotlin #kmp #di #koin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍6
💉 Вышел Koin 4.0.4 с исправлениями багов и пометили Deprecated методы, нерекомендуемые для использования

#kotlin #di #koin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Metro - Новый DI фреймворк на чистом Kotlin (ещё в разработке)

@DependencyGraph
interface AppGraph {
val httpClient: HttpClient

@Provides
private fun provideFileSystem(): FileSystem = FileSystem.SYSTEM
}

@Inject
class HttpClient(private val fileSystem: FileSystem)

@Inject
@Composable
fun App(circuit: Circuit)


#kotlin #di #ksp
👍35
💉 Вышел Koin 4.1

Что нового:
👉 Упростили конфигурацию
👉 Улучшили работу со Scope. Дообавили архитипы для Scope
👉 ViewModel Scope интегрировали с механизмом ViewModel auto closable
👉 Появилась возможность проверки конфигурации через через тесты
👉 Поддержка Compose 1.8 и Lifecycle 2.9
👉 Поддеркжа Ktor 3.2

🔗 Альтернативная ссылка

#kotlin #di
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥312👍2🤔2