当前位置: 首页 > 工具软件 > Koin > 使用案例 >

koin快速上手

秦博达
2023-12-01

Gradle Setup#

添加 Koin Android 依赖项,如下所示:

// Add Maven Central to your repositories if needed
repositories {
    mavenCentral()    
}
dependencies {
    // Koin for Android
    compile "io.insert-koin:koin-android:$koin_version"
}

本例中我们一共需要编写5个文件,分为如下四个步骤:

1、普通数据提供:MySimplePresenter --> HelloRepository 这两个文件可以为我们提供数据;
2、数据提供者在koin中注册:appModule:将上面两个数据提供者进行注册,以便于koin建立查询索引;
3、初始化koin:MainApplication:在这里进行初始化koin;
4、使用koin:MySimpleActivity:这里我们使用koin为我们创建好的实例。

步骤一:普通的数据提供者

让我们创建一个 HelloRepository 来提供一些数据:

interface HelloRepository {
    fun giveHello(): String
}

class HelloRepositoryImpl() : HelloRepository {
    override fun giveHello() = "Hello Koin"
}

让我们封装好他便于提供对外访问,用于使用这些数据:

class MySimplePresenter(val repo: HelloRepository) {

    fun sayHello() = "${repo.giveHello()} from $this"
}

步骤二:将数据提供者在koin中进行注册:

使用模块函数来声明一个模块,让我们声明我们的数据提供者:

val appModule = module {

    // single instance of HelloRepository
    single<HelloRepository> { HelloRepositoryImpl() }

    // Simple Presenter Factory
    factory { MySimplePresenter(get()) }
}

 我们将 MySimplePresenter 类声明为工厂,以便在每次 Activity 需要时创建一个新实例。

步骤三:初始化Koin

现在我们有了一个模块,让我们从 Koin 开始吧。打开您的应用程序类,或创建一个(不要忘记在您的 manifest.xml 中声明它)。只需调用 startKoin() 函数:

class MyApplication : Application(){
    override fun onCreate() {
        super.onCreate()
        // Start Koin
        startKoin{
            androidLogger()
            androidContext(this@MyApplication)
            modules(appModule)
        }
    }
}

步骤四:注入依赖,使用koin为我们创建实例

MySimplePresenter 组件将使用 HelloRepository 实例创建。为了让它进入我们的 Activity,让我们用 by inject() 委托注入器注入它:

class MySimpleActivity : AppCompatActivity() {

    // Lazy injected MySimplePresenter
    val firstPresenter: MySimplePresenter by inject()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        //...
        text.text = firstPresenter.sayHello()
    }
}

说明:

1、by inject() 函数允许我们在 Android 组件运行时(Activity、Fragment、Service...)中检索 Koin 实例

2、get() 函数在这里直接检索一个实例(非惰性)

完整示例见官方GitHub:

https://github.com/InsertKoinIO/koin/tree/master/quickstart/getting-started-koin-android 

 类似资料: