Kotlin之Koin

tankII發表於2021-09-09

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章