添加 Koin Android 依赖项,如下所示:
// Add Maven Central to your repositories if needed
repositories {
mavenCentral()
}
dependencies {
// Koin for Android
compile "io.insert-koin:koin-android:$koin_version"
}
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"
}
使用模块函数来声明一个模块,让我们声明我们的数据提供者:
val appModule = module {
// single instance of HelloRepository
single<HelloRepository> { HelloRepositoryImpl() }
// Simple Presenter Factory
factory { MySimplePresenter(get()) }
}
我们将 MySimplePresenter 类声明为工厂,以便在每次 Activity 需要时创建一个新实例。
现在我们有了一个模块,让我们从 Koin 开始吧。打开您的应用程序类,或创建一个(不要忘记在您的 manifest.xml 中声明它)。只需调用 startKoin() 函数:
class MyApplication : Application(){
override fun onCreate() {
super.onCreate()
// Start Koin
startKoin{
androidLogger()
androidContext(this@MyApplication)
modules(appModule)
}
}
}
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