适用于芬兰湾的科特林开发人员的实用轻量级依赖注入框架。
用纯芬兰湾的科特林编写,仅使用功能分辨率:无代理,无代码生成,无反射。
PS: KOIN支持Kotion和Java
本文主要讲解Koin(2.0.1)在AndroidX中的使用,所以直接添加koin-android依赖
首先添加Koin Android基本依赖
//Koin Android 实现“org.koin: koin-android: koin_version美元”
如果需要使用到范围(范围)控制,则依赖,koin-androidx-scope
//Koin AndroidX范围特性 实现“org.koin: koin-androidx-scope: koin_version美元”
如果项目中使用到ViewModel,那么毫不犹豫依赖koin-androidx-viewmodel
//Koin AndroidX ViewModel功能 实现“org.koin: koin-androidx-viewmodel: koin_version美元”
既然使用芬兰湾的科特林,扩展功能怎么能少呢?添加koin-androidx-ext
//Koin AndroidX实验功能 实现“org.koin: koin-androidx-ext: koin_version美元”
Koin入门使用相当容易,学会下面几个关键词就好了,跟着来看看哦~
<强> 强>
今天活动需要一个女孩(嗯~,可能是几个),那我们就创建个依赖对象使用Koin注入给它,这时我需要每次都给它个新的(使用工厂):
val girlModule={模块 工厂{ 女孩() } }
依赖对象有了,我得让Koin知道,所以需要在我们的应用初始化:
覆盖乐趣>//注释掉的是另一种写法 类Simple1Activity: AppCompatActivity () { 私人val女孩inject()//私有lateinit var女孩:女孩 覆盖有趣alt=" Android Koin2基本使用的那件事儿"> 看脸都是一个人啊!怎么知道每次都是个新女孩呢?直接检查女孩的身份证:
系统。:- - - - -在com.joker.koin.model。Girl@a5b751b
引用>
系统。:- - - - -在com.joker.koin.model。Girl@727e094
系统。:- - - - -在com.joker.koin.model.Girl@e005b30K,原来是3胞胎……
<强>单强>
现在都什么时代了,不能给它享受多个女孩啊,那就把工厂换成单身,动手试试检查女孩证件:
val girlModule={模块 单{ 女孩() } }系统。:- - - - -在com.joker.koin.model。Girl@48146b8
引用>
系统。:- - - - -在com.joker.koin.model。Girl@48146b8
系统。:- - - - -在com.joker.koin.model.Girl@48146b8如此简单的我们就实现了单例。什么?同时要2个女孩,还要不同类型且要是固定的。没问题我们有限定符和定义
val girlModule={模块 单(名为(“girl1”)){(类型:字符串)→ 女孩()。应用{ 这一点。类型=类型 } } 单(名为(“girl2”)){(类型:字符串)→ 女孩()。应用{ 这一点。类型=类型 } } }看看活动怎么样了:
类Simple2Activity: AppCompatActivity () { 私人val girl1 inject(命名(“girl1”)){尺寸(“可爱")} 私人val girl2 inject (命名(“girl2”)){尺寸(“性”感)} 覆盖有趣alt=" Android Koin2基本使用的那件事儿"> <强>范围强>
范围是个什么东西呢?我理解是使用范围,类似于生命周期,我们可以控制它的存活范围。
来个其他的栗子换个口味,先奉上效果图:
val girlModule={模块 范围(命名(“范围”)){ 作用域{ ScopeEntity () } } }范围必须得指定预选赛,创建了范围依赖。接下来就是createScope和bindScope,在这里设置了默认值,“Scope1Activity”:
类Scope1Activity: AppCompatActivity () { 覆盖乐趣> 类Scope2Activity: AppCompatActivity () { 覆盖乐趣> 覆盖有趣onActivityResult (requestCode: Int, resultCode: Int数据:意图# 63;){ 超级。onActivityResult (requestCode resultCode,数据)//验证范围销毁延时是为了保证Scope1Activity已经执行onDestory scope.postDelayed ({ 范围。文本={试 getKoin () .getScope (scope1) .getAndroid Koin2基本使用的那件事儿