🚇 Три паттерна Metro DI для KMP https://medium.com/@kmpbits/drop-the-clutch-three-metr... — 23 мая 2026 г. в 06:30:02.194
🚇 Три паттерна Metro DI для KMP https://medium.com/@kmpbits/drop-the-clutch-three-metro-di-patterns-every-kmp-developer-should-know-kmp-bits-0ae2f8329797 Автор перешёл с Koin Annotations на Metro в мультимодульном Compose Multiplatform и разбирает три паттерна на демо-чате с реалтайм-сокетом. 1️⃣ Базовая фича (список чатов) @ContributesBinding + @SingleIn - имплементация сама цепляется к графу, root-граф её не объявляет. ViewModel через @ContributesIntoMap + @ViewModelKey попадает в map, который кормит MetroViewModelFactory. 2️⃣ Платформенный код (разрешения на нотификации) Нельзя вешать @DependencyGraph на общий интерфейс - на iOS не скомпилится из-за Android Context. Правильно: общий интерфейс без аннотаций Metro, а @DependencyGraph только на платформенных реализациях (AndroidRootGraph, IosRootGraph). 3️⃣ Скоуп с жизненным циклом (чат-комната) WebSocket нельзя держать в AppScope - будет висеть всю жизнь приложения. Решение - ChatScope через @GraphExtension, наследует биндинги родителя. Runtime-значение (conversationId) прокидывается через @Provides в фабрике графа, доступно всем в скоупе. ❗️Из граблей: internal на @ContributesBinding ломает агрегацию между модулями (билд пройдёт, упадёт в рантайме); @DependencyGraph не может расширять @DependencyGraph; ошибки указывают на интерфейс, а не на причину. Демо на GitHub —————— 💭 Если присматриваетесь к Metro для KMP - практический разбор реальных кейсов. Скинь тому, кто пилит мультиплатформенный DI. Telegram | Селеба | Max | YouTube

