https://start.insert-koin.io/#/quickstart/android-viewmodel
开始
Koin in 5 minutes (5分钟快速入手Koin)
Getting Started (开始)
这个教程将会告诉你如何使用Koin注入和检索ViewModel组件来编写一个Android/Kotlin application。
可以直接在Github上查看项目或者下载zip
🚀 Go to Github or download Zip
通过如下方式添加 Koin Android 的依赖:
1
2
3
4
5
6
7
8
9
  | // Add Jcenter to your repositories if needed
repositories {
    jcenter()    
}
dependencies {
    // Koin for Android - Scope feature
    // include koin-android-scope & koin-android
    compile "org.koin:koin-android-viewmodel:$koin_version"
}
  | 
让我们创建一个 HelloRepository 来提供一些数据:
1
2
3
4
5
6
7
  | interface HelloRepository {
    fun giveHello(): String
}
class HelloRepositoryImpl() : HelloRepository {
    override fun giveHello() = "Hello Koin"
}
  | 
让我们创建一个ViewModel类,来消费这些数据:
1
2
3
4
  | class MyViewModel(val repo : HelloRepository) : ViewModel() {
    fun sayHello() = "${repo.giveHello()} from $this"
}
  | 
使用 module 函数来声明一个module。让我们声明我们的第一个组件:
1
2
3
4
5
6
7
8
  | val appModule = module {
    // single instance of HelloRepository
    single<HelloRepository> { HelloRepositoryImpl() }
    // MyViewModel ViewModel
    viewModel { MyViewModel(get()) }
}
  | 
在一个 module 中,我们将我们的 MyViewModel 类声明成一个 viewModel。Koin将会将这个 MyViewModel 交给Lifecycle ViewModelFactory并帮我们将它绑定到当前的组件上。
现在我们已经有了一个module,我们就可以使用Koin了。打开你的Application类,或者创建一个(不要忘了在你的Manifest.xml中声明它)。然后只需要调用 startKoin() 函数:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  | class MyApplication : Application(){
    override fun onCreate() {
        super.onCreate()
        // Start Koin
        startKoin{
            androidLogger()
            androidContext(this@MyApplication)
            modules(appModule)
        }
    }
}
  | 
MyViewModel 组件将会被通过 HelloRepository 实例所创建。为了在我们的Activity中获取到它,就需要使用 by viewModel() 委托注入器来注入它:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
  | class MyViewModelActivity : AppCompatActivity() {
    // Lazy Inject ViewModel
    val myViewModel: MyViewModel by viewModel()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_simple)
        //...
    }
}
  | 
by viewModel() 函数允许我们从Koin中检索一个ViewModel实例,链接到Android ViewModelFactory。
getViewModel() 函数能非延迟的直接检索一个实例。