在 Android 中使用 Koin 进行依赖注入

Koin 简介

Koin 是一个高效的依赖注入框架,我们将实例化应用程序中各种对象的任务委托给它。我们将探讨 Koin 如何帮助我们高效地管理这些依赖关系。

开始使用 Koin

Koin 是一个非常简单易用的框架,我们要做的就是构建我们的类,指示 Koin 如何创建这些依赖关系,然后我们就可以在需要时随时调用它们。首先,我们创建一个空的活动项目,并在应用级 build.gradle 文件中添加以下依赖项。

// Koin for Android
implementation "org.koin:koin-android:3.2.0"
implementation ‘org.koin:koin-androidx-viewmodel:3.2.0‘
implementation ‘org.koin:koin-androidx-scope:3.2.0‘

定义项目组件

为了演示,我们需要几个相互依赖的组件。以下代码应添加到我们项目的 Kotlin 文件中。

class Pilot(private val fly: Fly, private val eat: Eat) {

   fun perform(): String = fly.flyPlane() + "
" + eat.eatFood()
}

class Eat {
   fun eatFood(): String = "I am eating food"
}

class Fly {
   fun flyPlane(): String = "I am flying a plane"
}

第一个类是飞行员类;飞行员会驾驶飞机并进食。因此,Pilot 类依赖于那些类。eatFood() 和 flyPlane() 函数(它们都位于 Eat 和 Fly 类中)必须由它们调用或访问。为了消除这种依赖关系,这两个类被作为参数添加。因此,要创建 Pilot 类,需要 Eat 和 Fly 类的实例。以下代码应添加到 MainActivity 文件的 onCreate 函数中。

override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       val binding = ActivityMainBinding.inflate(layoutInflater)
       setContentView(binding.root)
       
       val fly = Fly()
       val eat = Eat()
       val pilot = Pilot(course, friend)
       
       binding.textView.text = pilot.perform()
   }

代码创建了所有类的实例。应用程序启动时,文本视图将显示以下内容:

I am flying a plane
I am eating food

应用程序目前这样运行是可以的。然而,正如我们刚才讨论的,依赖这种形式的依赖注入会使应用程序在扩展时难以管理。让我们看看 Koin 如何帮助我们管理这些依赖关系。

Koin 模块的实现

Koin 使用模块来创建依赖项。以下代码应添加到一个名为“module”的新 Kotlin 文件中。

val appModule = module {
   single { Fly() }
   factory { Eat() }
   factory { Pilot(get(), get()) }
}

顾名思义,模块是使用 module 函数创建的。创建单例实例需要关键字 single。这表明当需要依赖项时,Koin 将返回该类的同一实例。因为我们认为所有飞行员都以相似的方式飞行,所以我们创建了一个单例。另一方面,当我们每次调用都需要类的新实例时,我们使用 factory 方法。Eat 和 Fly 类都是使用 factory 创建的,因为我们每次使用它们时都需要一个新实例。Koin 会识别我们需要的依赖类型,然后为我们获取它。对于模块,这就是我们需要的一切。让我们继续启动 Koin。

启动 Koin

要启动 Koin,我们创建一个应用程序类并插入以下代码。

// get list of all modules
val moduleList = listOf(testModule)
        
// start koin with the module list
startKoin(this, moduleList)

为了启动 Koin,我们实现了 startKoin 函数。Koin 已经准备好实施了,因此让我们将其集成到我们的主活动中。用以下代码替换 MainActivity 的 onCreate 方法。

val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

val pilot: Pilot by inject()

binding.textView.text = pilot.perform()

通过注入委托进行依赖的延迟注入时,代码行数肯定有所减少。也可以通过使用 get 函数以非延迟方式获取依赖项。重新启动应用程序。虽然代码运行完美,但这次我们使用了依赖注入框架,这确实有助于确保我们的项目易于测试和维护。

结论

本文介绍了依赖注入以及如何使用 Koin(一个 Kotlin 依赖注入框架)来处理依赖关系。Koin 已被证明易于设置和使用。此外,我们还看到了依赖注入如何使我们保持程序的质量。本文提供了开始使用这个实用且轻量级的框架所需的基础知识。不要犹豫去使用它,因为它是一个有用的框架,允许

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43752.html
点赞
0.00 平均评分 (0% 分数) - 0