Koin намного проще с более чистым синтаксисом, и если вы используете kotlin (что я думаю, если вы не зададите этот вопрос), я рекомендую использовать Koin, он написан на чистом kotlin с использованием только функционального разрешения (без отражения, без генерации кода) и сводит стандартный код к минимуму. он поддерживает ViewModels
, но Dagger написан на java, он гораздо более сложный, трудный для изучения, и он использует аннотации, что означает генерацию кода, таким образом, больше строк кода и больше времени сборки, и это требует Гораздо больше стандартного кода
. Вот как работает Коин:
class MyFragment() {
private val viewModel by viewModel<MyViewModel>()
}
inline fun <reified T : ViewModel> LifecycleOwner.viewModel(
qualifier: Qualifier? = null,
noinline parameters: ParametersDefinition? = null
): Lazy<T> = lazy { getViewModel<T>(qualifier, parameters) }
, с другой стороны, Dagger официально поддерживается Google, что означает большую поддержку в сообществах и, возможно, меньше ошибок. это мощный и хорошо работает. Dagger генерирует код во время сборки и делает инъекцию только во время выполнения путем прямого назначения поля, так что вы получаете ошибки во время компиляции, но Koin делает внедрение во время выполнения, поэтому, если вы не будете осторожны, вы можете получить исключения во время выполнения. и поскольку Dagger генерирует коды во время компиляции, он имеет лучшую производительность, чем Koin, а Koin намного медленнее, чем Dagger, как в процессах настройки, так и в процессах внедрения, это делает Dagger лучше для больших проектов!
Koin инициализирует свой локатор служб во время выполнения с большим количеством ссылок на функции создания сервисов с использованием функционального программирования, затем, когда потребитель сервиса вызывает функцию инжектирования для получения экземпляра, он будет искать этот сервис по всем модулям в локаторе. Вот почему он намного медленнее
Другое отличие состоит в том, что Koin является локатором службы, а не инжектором зависимости. (последние две ссылки содержат информацию о разнице). он использует хитроумный трюк, который вы можете использовать для ручного внедрения зависимости
, вот как Dagger2 работает:
Я лично рекомендую Koin хотя бы для небольших и средних проектов, но Google рекомендует Dagger2. они оба достаточно хороши, и вы должны решить, какой из них подходит вам и вашему проекту
, для получения дополнительной информации прочитайте эти статьи:
Сравнение кинжала 2 и Коина
Коин против Кинжала, передай привет Коину
Инъекция зависимостей с Коин
Коин Д.И. & Сравнение Android Каркас ввода зависимостей
koin android пример - DI In Android
Внедрение зависимостей в Android
Коин против Dagger (Сервисный локатор против DI)
Инъекция зависимости от Сервисного локатора