Kotlin之Koin
Koin是一款輕量級的依賴注入框架,根據官方的描述,它無代理,無程式碼生成,無反射。
學過Dagger2的同學都深深體會到Dagger入門的艱辛。
但是Koin,你透過5分鐘的學習就可以掌握它的基本用法。
學完Koin,你可以向Dagger 說bye bye了。
第一步:Gradle Setup
在你的app build.gradle中新增依賴:
// Add Jcenter to your repositories if neededrepositories { jcenter() } dependencies {// Koin for Androidcompile "org.koin:koin-android:1.0.1"// Koin Android Scope featurecompile "org.koin:koin-android-scope:1.0.1"// Koin Android ViewModel featurecompile "org.koin:koin-android-viewmodel:1.0.1"}
第二步:Our components
寫一些測試用的類,提供資料
interface HelloRepository { fun giveHello(): String }class HelloRepositoryImpl() : HelloRepository { override fun giveHello() = "Hello Koin"}
第三步:自定義ViewModel
使用第二步定義類提供的資料
class MyViewModel(val repo : HelloRepository) : ViewModel() { fun sayHello() = "${repo.giveHello()} from $this"}
第四步:定義Koin module
val appModule = module { // single instance of HelloRepository single<HelloRepository> { HelloRepositoryImpl() } // MyViewModel ViewModel viewModel { MyViewModel(get()) } }
程式碼分析:
appModule中宣告瞭MyViewModel,它的引數傳入了get(), 它將自動搜尋到對應的HelloRepository,建立例項。
single標明HelloRepository建立的是單例
第五步:啟動 Koin
class MyApplication : Application(){ override fun onCreate() { super.onCreate() // Start Koin startKoin(this, listOf(appModule)) } }
第六步:注入依賴
class MyViewModelActivity : AppCompatActivity() { // Lazy Inject ViewModel val myViewModel: MyViewModel by viewModel() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_simple) //... } }
作者:wenson123
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1795/viewspace-2815955/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 當Koin撞上ViewModelView
- 【Kotlin】初識Kotlin之物件導向Kotlin物件
- Kotlin之UI篇KotlinUI
- 放棄dagger?Anrdoi依賴注入框架koin依賴注入框架
- LeetCode之Insert Interval(Kotlin)LeetCodeKotlin
- Kotlin註解之JvmNameKotlinJVM
- 初識Kotlin之集合Kotlin
- LeetCode之Fibonacci Number(Kotlin)LeetCodeKotlin
- LeetCode之Evaluate Division(Kotlin)LeetCodeKotlin
- LeetCode之Flipping an Image(Kotlin)LeetCodeKotlin
- LeetCode之Find Common Characters(Kotlin)LeetCodeKotlin
- LeetCode之Smallest Range I(Kotlin)LeetCodeKotlin
- LeetCode之Number of Recent Calls(Kotlin)LeetCodeKotlin
- kotlin之泛型的使用Kotlin泛型
- LeetCode之Squares of a Sorted Array(Kotlin)LeetCodeKotlin
- LeetCode之Univalued Binary Tree(Kotlin)LeetCodeKotlin
- LeetCode之Shortest Distance to a Character(Kotlin)LeetCodeKotlin
- LeetCode之Binary Tree Pruning(Kotlin)LeetCodeKotlin
- LeetCode之Unique Email Addresses(Kotlin)LeetCodeAIKotlin
- LeetCode之Sum of Left Leaves(Kotlin)LeetCodeKotlin
- LeetCode之Sort Array By Parity(Kotlin)LeetCodeKotlin
- Kotlin基礎之函式Kotlin函式
- Kotlin & Java 之單利模式KotlinJava模式
- Kotlin 與 JAVA 不同之處KotlinJava
- Kotlin coroutine之協程基礎Kotlin
- Kotlin之類繼承結構Kotlin繼承
- LeetCode之Odd Even Linked List(Kotlin)LeetCodeKotlin
- LeetCode之Leaf-Similar Trees(Kotlin)LeetCodeMILAKotlin
- 雞你太美之 Kotlin 和 DatabindingKotlin
- LeetCode之Convert BST to Greater Tree(Kotlin)LeetCodeKotlin
- LeetCode之Reveal Cards In Increasing Order(Kotlin)LeetCodeKotlin
- LeetCode之Increasing Order Search Tree(Kotlin)LeetCodeKotlin
- LeetCode之Unique Morse Code Words(Kotlin)LeetCodeKotlin
- [開發效率]Kotlin之擴充套件Kotlin套件
- Kotlin設計模式解析之單例Kotlin設計模式單例
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- Gradle指南之從Groovy遷移到KotlinGradleKotlin
- LeetCode之Sum of Even Numbers After Queries(Kotlin)LeetCodeKotlin