Android依赖注入框架
dagger2/Hilt是我们常用的依赖注入框架,由谷歌公司维护,性能强大,但是也有很多缺点,比如学习成本高,上手慢,代码量大,编译慢等等。Koin就能解决这些问题。
Koin是一款轻量级的依赖注入框架,虽然它性能不及dagger2/Hilt,但是它易上手、易调试、代码少,并且对kotlin和jetpack都有很好的支持。下面就让我们来看看Koin的简单使用。
Koin在Android中的简单使用(kotlin)
(1)添加依赖
dependencies {
implementation "io.insert-koin:koin-android:$koin_version"
}
(2)创建待注入组件类
创建提供数据的仓库
interface TestRepository {
fun provideData():String
}
class TestRepositoryImpl():TestRepository{
override fun provideData(): String="testRepository"
}
创建控制器类来操作仓库的数据
class MyTestPresenter(val repo: TestRepository){
fun getData()="${repo.provideData()} form $this"
}
(3)创建Koin module(依赖提供方)
使用module来声明待注入的组件
val appModule= module {
single<TestRepository> { TestRepositoryImpl() }
factory { MyTestPresenter(get()) }
}
(4)启动Koin
需要在Application中启动Koin
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidLogger()
androidContext(this@MyApplication)
modules(appModule)
}
}
}
(5)注入依赖
在程序中需要使用的地方注入依赖,比如Activity, fragment, Service…
class MainActivity : AppCompatActivity() {
val myPresenter:MyTestPresenter by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
Koin配合ViewModel使用
和前面直接使用的流程差不多
(1)添加依赖
dependencies {
implementation "io.insert-koin:koin-android:$koin_version"
implementation "io.insert-koin:koin-android-viewmodel:$koin_version"
}
(2)创建待注入ViewModel组件
这里创建提供数据的仓库与前面一致 只不过是使用ViewModel来处理数据
class MainViewModel(val repo:TestRepository):ViewModel(){
fun getData()="${repo.provideData()} form $this"
}
(3)创建Koin module
val appModule= module {
single<TestRepository> { TestRepositoryImpl() }
viewModel { MainViewModel(get()) } }
}
(4)启动Koin
启动方式不变
(5)注入依赖
val mainViewModel: MainViewModel by viewModel()
需要了解更多内容,请点击访问官网
|