ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

依赖注入框架Koin(一)知识预览

2021-01-03 16:34:35  阅读:638  来源: 互联网

标签:koin 预览 框架 implementation Koin version org android 调用者


一、基础概念

依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。

具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。DI

依赖注入框架的优点:

依赖注入库会自动释放不再使用的对象,减少资源的过度使用。

在指定范围内,可重用依赖项和创建的实例,提高代码的可重用性,减少了很多模板代码。

代码变得更具可读性。

易于构建对象。

编写低耦合代码,更容易测试.

Android端常用DI框架

  • Dagger2/Hilt

  • Koin

框架优点缺点
dagger2/HiltGoogle加持,社区广泛,性能佳难上手,编译慢,编译错误晦涩,kotlin、android支持不简洁(代码量大)
Koin易上手、易调试、编译快、代码少,jetpack/Kotiln支持棒性能不及dagger2/Hilt,java兼容不足,社区小
......  

二、Koin的学习使用

依赖包的添加

//1、在project的build.gradle下,buildScript的dependencies添加 classpath
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.koin:koin-gradle-plugin:$koin_version"
    }
}
//2、应用koin插件
apply plugin: 'koin'
//3、在各自module的build.gralde 的dependencies添加依赖包
// Koin for Kotlin
implementation "org.koin:koin-core:$koin_version"
implementation "org.koin:koin-core-ext:$koin_version"
​
// Koin for Android
implementation "org.koin:koin-android:$koin_version"
implementation "org.koin:koin-android-scope:$koin_version"
implementation "org.koin:koin-android-viewmodel:$koin_version"
implementation "org.koin:koin-android-ext:$koin_version"
//koin for Androidx 基本二选一即可
implementation "org.koin:koin-androidx-scope:$koin_version"
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
implementation "org.koin:koin-androidx-fragment:$koin_version"
implementation "org.koin:koin-androidx-ext:$koin_version"
​
testImplementation "org.koin:koin-test:$koin_version"

1 、简单使用

  • 三步走

  1. 业务class的创建

  2. 定义koin的容器模块module,内部声明类的创建(单例、工厂等)

  3. Application调用stratKoin内部初始化modules

  • 关键函数符号

    • startKoin

    • module

    • single

    • factory

    • viewmodel

    • fragment

    • by inject()/get(),前者在Android的运行时组件(AFSC)有效

    • by viemwodel()/getViewModel()

    • named()//限定标示符,string和type

    • bind类似于类型扩展,接口实现,通过get<T>获取,泛型时候,koin.bind(T,instance)来获取,另有getAll()

2、使用

  1. 无参构造,单参数构造

  2. 多构造函数,需要使用qualifiers限定符号

  3. single单例的scope,factory是新建对象 的scope,可以自定scope

  4. 外部参数的构造函数,初始化可用表达式构造如:(view:View)->ViewInfo(view),使用方get/inject时候,接收参数使用parametersOf()、、最多5个参数

  5. 普通类使用koin注解,需要实现KoinComponent接口

  6. 跨模块module的使用依旧如是

  7. getProperty获取配置file的Property属性,android是androidFileProperties

  8. 组件化开发中,可使用外部加载 loadKoinModule在startKoin之外操作。

  9. Activity/Fragment默认扩展了scope字段

附注:

  1. 在startKoin中androidLogger注意添加参数Level.error,否则可能报错(这是个bug)

  2. 使用by lazy的时候,注意加载顺序,不要和别人比懒,可能别人比你更懒!

  3. 在module中不要空的函数块

  4. 多次重复声明某个对象,需要override

  5. 注意inject/viewmodel等函数符号的导包,别弄错

  6. koin适用于android ,java,所以注意区分

标签:koin,预览,框架,implementation,Koin,version,org,android,调用者
来源: https://blog.csdn.net/cpcpcp123/article/details/112137214

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有