Android 的建構函式 DSL
新的建構函式 DSL (自 3.2 版起)
Koin 現在提供一種新型的 DSL 關鍵字,允許您直接指定類別建構函式,並避免在 lambda 表達式中輸入您的定義。
請查看新的 建構函式 DSL 部分以獲取更多詳細資訊。
對於 Android,這表示以下新的建構函式 DSL 關鍵字:
viewModelOf()
- 等同於viewModel { }
fragmentOf()
- 等同於fragment { }
workerOf()
- 等同於worker { }
INFO
請確保在類別名稱前使用 ::
,以指定您的類別建構函式
Android 範例
假設一個 Android 應用程式包含以下元件:
kotlin
// 一個簡單的服務
class SimpleServiceImpl() : SimpleService
// 一個 Presenter,使用 SimpleService 並可接收注入的 "id" 參數
class FactoryPresenter(val id: String, val service: SimpleService)
// 一個 ViewModel,可接收注入的 "id" 參數、使用 SimpleService 並取得 SavedStateHandle
class SimpleViewModel(val id: String, val service: SimpleService, val handle: SavedStateHandle) : ViewModel()
// 一個有作用域的 Session,可接收指向 MyActivity 的連結 (來自作用域)
class Session(val activity: MyActivity)
// 一個 Worker,使用 SimpleService 並取得 Context 與 WorkerParameters
class SimpleWorker(
private val simpleService: SimpleService,
appContext: Context,
private val params: WorkerParameters
) : CoroutineWorker(appContext, params)
我們可以這樣宣告它們:
kotlin
module {
singleOf(::SimpleServiceImpl){ bind<SimpleService>() }
factoryOf(::FactoryPresenter)
viewModelOf(::SimpleViewModel)
scope<MyActivity>(){
scopedOf(::Session)
}
workerOf(::SimpleWorker)
}
Android 反射 DSL (自 3.2 版起已棄用)
CAUTION
Koin 反射 DSL 現已棄用。請改用上方的 Koin 建構函式 DSL。